Tag: 承诺

蓝鸟承诺 – 每个function

预先感谢您的帮助。 当使用蓝鸟承诺时,我有一系列的承诺运行。 在最后的承诺期间,我想为数组中的每个对象多次运行一个函数。 下面是伪代码: var userArray = [ { name: "John", email: "John@email.com" }, { name: "Jane", email: "jane@email.com" }]; var functionOne = function() { //returns Promsie object }; var functionTwo = function() { //returns promise object }; var createUser = function(user) { return User.findOrCreate({email: user.email},{ name: user.name, email: user.email }); }; functionOne() .then(functionTwo) .each(createUser(userArray)) […]

何时不使用承诺

在阅读了许多关于es6的承诺以及为什么要实现这些承诺的文章之后,我感到所有的(不重要的)javascript函数都应该是承诺的。 事实上,使用它们编写代码让我感觉很好,因为我避免了厄运的三angular形,并且看起来变得简洁明了。 (这真的使得关于执行的推理更简单)。 我没能find的是:什么时候不使用承诺? 我何时避免使用它们? 更新: 虽然我已经看到一些像API一致性的伟大点,我还没有find坚实的NO情况。 Lux的答案表明,获取事件发射器的操作应避免它们,因为反复出现的callback与promise不兼容。 不过,我觉得答案现在仍然缺乏实质性的检查(正确)。

如何用Bluebird提升NodeJS Express

我用Express来使用NodeJS,并使用Bluebird作为承诺。 我试图promisify应用程序对象如下,但一旦promisified函数总是抛出错误。 部分代码如下: var express = require('express'), app = express(), bodyParser = require('body-parser'), Promise = require("bluebird"); app.postAsync = Promise.promisify(app.post); app.postAsync('/api/v1/users/update').then(function(req, res, next) { // never gets here }) .catch(function(err) { console.log("doh!!!"); }); 我试图promisifyAll具有相同的效果。 为什么它失败了,有什么办法promisify后/得到?

Node.js:执行多个asynchronous操作的最佳方式,然后做别的事情?

在下面的代码中,我试图一次性创build多个(大约10个)HTTP请求和RSS分析。 我在我需要访问和parsing结果的URI数组上使用标准的forEach构造。 码: var articles; feedsToFetch.forEach(function (feedUri) { feed(feedUri, function(err, feedArticles) { if (err) { throw err; } else { articles = articles.concat(feedArticles); } }); }); // Code I want to run once all feedUris have been visited 我明白,一旦调用一个函数,我应该使用callback。 然而,在这个例子中,我能想到使用callback的唯一方法就是调用一个函数来计算它被调用了多less次,并且只有在调用与feedsToFetch.length相同的次数时才会继续。 。 所以我的问题是, 在node.js中处理这种情况的最好方法是什么 ? 最好没有任何forms的阻塞! (我仍然想要快速的速度)。 是承诺还是别的? 谢谢,丹尼

如何正确提交蓝鸟的JSON.parse方法

我试图promisify JSON.parse方法,但不幸的是没有任何运气。 这是我的尝试: Promise.promisify(JSON.parse, JSON)(data).then((result: any) => {… 但我得到以下错误 Unhandled rejection Error: object

Promise.coroutine如何支持生成器作为yieldable值?

Promise.coroutine支持Promise作为可产生的值types。 通过addYieldHandler(function handler) , Promise.coroutine也可以支持任何只能重新返回结果的types。 但我怎么能写一个yieldHandler,可以像co一样处理一个generatortypes呢?

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是一个反模式。 有没有更好的/更干净的方式来完成我想要做的事情?