Articles of 承诺

CasperJS,并行浏览与testing框架

问题:我想知道是否有可能在一个脚本文件中使用testing框架进行并行浏览,所以使用tester模块和casperjstesting命令。 我见过一些人创build了两个casper实例: CasperJS同时请求和https://groups.google.com/forum/#!topic/casperjs/Scx4Cjqp7hE ,但正如文档中所述,我们不能创build新的casper实例在一个testing脚本。 所以我试着做一个类似的简单的例子 – 一个caspertesting脚本(只需复制并执行这个工作): var url1 = "http://casperjs.readthedocs.org/en/latest/testing.html" ,url2 = "http://casperjs.readthedocs.org/en/latest/testing.html" ; var casperActions = { process1: function () { casper.test.begin('\n********* First processus with our test suite : ***********\n', function suite(test) { "use strict"; casper.start() .thenOpen(url1,function(){ this.echo("1","INFO"); }); casper.wait(10000,function(){ casper.test.comment("If parallel, it won't be printed before comment of the second processus !"); […]

蓝鸟promisify和callback没有错误的参数

我试图promisify不使用callback(err, data)模式的第三方库。 相反,他们总是返回callback(data)并throw错误。 Promise.promisifyAll(horse); var p = Promise.defer(); horse.drinkAsync() .error(function(data) { p.fulfill(data); }) .catch(function (err) { console.error('error occured', err); }); return p.promise; 用promise来包装这样一个行为的好方法是什么,仍然有它看起来不错,并允许捕捉抛出的错误? catch子句不触发,应用程序崩溃。

使用Bluebird在承诺中包装Node.jscallback

如何在Bluebird中使用Promise包装Node.jscallback? 这是我想出的,但想知道是否有更好的方法: return new Promise(function(onFulfilled, onRejected) { nodeCall(function(err, res) { if (err) { onRejected(err); } onFulfilled(res); }); }); 如果只有一个错误需要返回,是否有更干净的方法来做到这一点? 编辑我试图使用Promise.promisifyAll(),但结果不被传播到then子句。 我的具体例子如下所示。 我正在使用两个库:a)sequelize,它返回承诺,b)supertest(用于testinghttp请求),它使用节点样式callback。 这里是没有使用promisifyAll的代码。 它调用sequelize初始化数据库,然后发出HTTP请求来创build订单。 Bosth console.log语句正确打印: var request = require('supertest'); describe('Test', function() { before(function(done) { // Sync the database sequelize.sync( ).then(function() { console.log('Create an order'); request(app) .post('/orders') .send({ customer: 'John Smith' }) .end(function(err, res) { […]

pipe理承诺依赖关系

我正在使用Node.js和Bluebird创build一些相当复杂的逻辑,包括解压缩结构化文件,parsingJSON,创build和更改多个MongoDB文档,以及在多个位置写入相关文件。 我也有相当复杂的error handling,这取决于发生错误时系统的状态。 我很难想出一个通过承诺来pipe理依赖关系的好方法。 我现有的代码基本上是这样的: var doStuff = function () { var dependency1 = null; var dependency2 = null; promise1() .then(function (value) { dependency1 = value; return promise2() .then(function (value) { dependency2 = value; return promise3(dependency1) .then(successFunction); }); }) .catch(function (err) { cleanupDependingOnSystemState(err, dependency1, dependency2); }); }; 请注意,在promise3之前不需要dependency1,并且error handling程序需要知道依赖关系。 对我来说,这似乎是意大利面代码(和我的实际代码是很多并行控制stream程更糟糕)。 我也读过,在.thencallback中返回另一个promise是一个反模式。 有没有更好的/更干净的方式来完成我想要做的事情?

如何保证node.js脚本处于活动状态,同时承诺正在解决?

我的脚本使用promise(使用q库)执行一些asynchronous任务。 运行摩卡testing工作正常。 但是从命令行运行脚本不会。 节点进程立即死亡。 var bot = require('./bot'); bot.getCategories().then(function (categories) { console.log('Found ' + categories.length + ' categories'); });

发电机function与蓝鸟和coexpression

我正在尝试使用节点0.12中的一些和声function,特别是尝试使用新的生成器function。 我正在用co(v4),bluebird和express(v4)这样做,就像这样: // … var fs = bluebird.promisifyAll(require('fs')); // … app.post('/test', co.wrap(function* (req, res, next) { var contents = yield fs.readFileAsync('/etc/hosts', 'utf8'); return res.send(contents); })); // … 根据它的文档,co.wrap返回一个正常的函数,它返回给定生成器函数的promise。 到目前为止,这是工作正常,但我不知道的是,如果a)我通过不等待返回的承诺的结果泄漏内存和b)如果我可能会失去一个exception抛出我的生成器函数,或一它使用的模块。 这是一个好方法吗? 你看到有什么不对吗?

使用node-redis和节点8 util.promisify

节点-v:8.1.2 我使用redis客户端node_redis与节点8 util.promisify,没有blurbird。 callbackredis.get是好的,但promisifytypes获取错误消息 TypeError:无法读取未定义的属性'internal_send_command' get(D:\ Github \ redis-test \ node_modules \ redis \ lib \ commands.js:62:24) 在get(internal / util.js:229:26) 在D:\ Github \ redis-test \ app.js:23:27 在对象。 (d:\ Github上\ redis的testing\ app.js:31:3) 在Module._compile(module.js:569:30) 在Object.Module._extensions..js(module.js:580:10) 在Module.load(module.js:503:32) 在tryModuleLoad(module.js:466:12) 在Function.Module._load(module.js:458:3) 在Function.Module.runMain(module.js:605:10) 我的testing代码 const util = require('util'); var redis = require("redis"), client = redis.createClient({ host: "192.168.99.100", port: 32768, }); let […]

触发事件触发事件

我的整个项目使用(蓝鸟)承诺,但有一个使用EventEmitter的特定图书馆。 我想实现这样的事情: Promise.on('connect', function() { x.doSomething(); }).then(function() { return new Promise(function(resolve) { y.doAction(resolve); // this will result in `eventB` getting emitted }); }).on('eventB', function() { z.handleEventB(); }).then(function() { z.doSomethingElse(); }); 我在Promises链的中间读到了EventEmitter的答案。 这给了我一个方法来执行“连接”事件的callback。 这是我到目前为止的地方 var p = new Promise(function(resolve) { emitter.on('connect', resolve); }); p.on = function() { emitter.on.apply(emitter, arguments); return p; }; p.on('connect', function() { x.doSomething(); […]

testing失败的承诺与摩卡的内置承诺支持

我应该怎样用摩卡和柴来testing我的诺言失败了? 我很困惑,因为我最初认为我应该使用'mocha-as-promised',但是这个包现在已经被弃用了(我正在使用mocha 2.1.0),build议只使用现在内置的promisevalidation摩卡。 请参阅: https : //github.com/domenic/mocha-as-promised 另一篇文章build议废除it()callback的“完成”参数 – 不知道为什么,因为我理解传入“done”参数是表示testing正在被asynchronoustesting的方式。 见: 我如何正确地testing摩卡和柴的承诺? 无论如何,我试图减less我的问题到下面的代码 – 请帮我修改这个,以便我可以testing我的承诺确实失败。 it.only("do something (negative test)", function (done) { var Q = require('q'); function makePromise() { var deferred = Q.defer(); deferred.reject(Error('fail')); return deferred.promise; }; makePromise() .then(done, done); });

与承诺Knex交易

我得到了正确的结果,实际上,这两个行动正在被视为一个单一的交易单位; 如果一个失败了,两个失败。 在这个代码示例中:我正在做一个事务 (1)插入(2)更新 我接近它的方式是将我的数据库操作嵌套在.then中。 我的问题是,如果这个代码是正确的意外? 我是新承诺和knex。 knex.transaction(function(t) { knex('foo') .transacting(t) .insert({id:"asdfk", username:"barry", email:"barry@bar.com"}) .then(function() { knex('foo') .where('username','=','bob') .update({email:"bob@foo.com"}) .then(t.commit, t.rollback) }) }) .then(function() { // it worked }, function() { // it failed }); 这工作,但我觉得我仍然做错了什么。 寻找意见。