Articles of 承诺

使用蓝鸟与未定义的成功callback函数

我在memcached上使用蓝鸟库。 memcached.set('foo', 'bar', 10, function (err) { /* stuff */ }); 这个函数不会在第二个参数中调用成功callback,所以看起来像。然后(res)函数不会被调用。 Promise.promisifyAll(memcached); memcached.setAsync(hashedCacheKey, obj).then(function (res) { resolve(res); }).catch(function (err) { reject(err, null); }); 有没有办法处理未成功的事件?

在node.js中永远重复这一组操作

我正在使用node.js 我有这个function,它使用承诺在执行某些操作之间引入延迟。 function do_consecutive_action() { Promise.resolve() .then(() => do_X() ) .then(() => Delay(1000)) .then(() => do_Y()) .then(() => Delay(1000)) .then(() => do_X()) .then(() => Delay(1000)) .then(() => do_Y()) ; } 我想要做的就是让这一套行动永远重演。 这怎么能在node.js中完成? //make following actions repeat forever do_X() Delay(1000) do_Y() Delay(1000) 编辑:我开始赏金的答案,使用重复队列来解决问题。

mongoose和Q承诺

我正在从这里的mongoose / q promises框架样例开始工作 ,但在尝试使用findOne时似乎遇到了nfbind的一些问题,主要是因为Q框架中的样本似乎不符合要点。 我的代码: var mongoose = require('mongoose'); var Q = require('q'); var user_schema = mongoose.Schema({username:String, last_touched:Date, app_ids:[String]}); var user = mongoose.model('user', user_schema); exports.user = user; exports.user.find = Q.nfbind(user.find); exports.user.findOne = Q.nfbind(user.findOne); 如果我调用user.findOne({username:'test'}).then(function(err, user) { … } ,用户总是未定义。如果我删除导出并使用callback的非诺言版本,我得到了用户,我错过了一些特殊的魔法,但是在看了代码实现之后,来自Q github和mongoose演示的例子…没有什么真正跳出来的。用Q做一个findOne工作? 我也尝试在源代码中而不是在模块中设置nfbind函数,但无济于事。

蓝鸟PromisifyAll没有任何asynchronous后缀,即取代原来的function可能?

Bluebird有一个promisifyAll函数,它“通过遍历对象的属性来提升整个对象,并在对象及其原型链上创build每个函数的asynchronous等价物”。 它使用后缀Async创build函数。 是否有可能完全取代旧的function? 被replace的函数就像原来的函数一样工作,另外它们也返回一个Promise,所以我认为完全replace旧函数应该是安全的。 var object = {}; object.fn = function(arg, cb) { cb(null,1) }; Bluebird.promisifyAll(object); object.fn // do not want object.fnAsync // => should replace `object.fn` 有一个选项来指定一个自定义后缀选项,但不幸的是它不适用于空string Bluebird.promisifyAll(object, {suffix: ''}); RangeError: suffix must be a valid identifier

如何处理循环中的承诺?

这是我想要做的 var response = []; Model.find().then(function(results){ for(r in results){ MyService.getAnotherModel(results[r]).then(function(magic){ response.push(magic); }); } }); //when finished res.send(response, 200); 但是它只返回[],因为asynchronous的东西还没有准备好。 我正在使用使用Q promise的sails.js。 任何想法如何在所有asynchronous调用完成时返回响应? https://github.com/balderdashy/waterline#query-methods(promise方法)

inheritance失败后继续

我有一个承诺可能会失败的情况,但我希望能够处理,并继续下一步。 我试图从失败捕获中返回一个成功的承诺,但它提供了一个关于没有方法设置的返回对象的错误。 这可能吗? 我将如何去做呢? Parse.Promise.as(1).then(function() { if (user.get('vendor')) { //fetch returns a promise return user.get('vendor').fetch(); } return new Vendor(); }).fail(function() { //this will be called if the fetch fails, in that case, just return new Vendor(); return Parse.Promise.as(function() { //this will be a valid promise so should hopefully return to the next then, but it […]

Promise履行处理程序undefined

非常基本的,似乎基于Promise的实现的实现不会返回我期望看到的值/数据。 这是我期待这个接口工作的方式: sdk.request(options) => Promise~Response → Object (JSON) 这里是我的模型中的代码: return sdk.request(options).then(function (value) { return value; }); 当我logging模型的返回时,我看到这个: { _bitField: 0, _fulfillmentHandler0: undefined, _rejectionHandler0: undefined, _progressHandler0: undefined, _promise0: undefined, _receiver0: undefined, _settledValue: undefined } 当我看到_fulfillmentHandler0: undefined ,似乎暗示没有履行处理程序: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then 但履行处理程序似乎是存在的: return sdk.request(options).then(function (value) { // fulfillment handler, right? return value; });

执行一系列的承诺。 一旦Promise.all完成,进入下一批

我有一个数组,其中包含承诺数组,每个内部数组可以有4k,2k或500个承诺。 总共有大约60K的承诺,我也可以用其他值来testing它。 现在我需要执行Promise.all(BigArray [0])。 一旦第一个内部数组完成,我需要执行下一个Promise.all(BigArray [1])等等。 如果我尝试执行一个Promise.all(BigArray)它的投掷: 致命的错误call_and_retry_2分配失败 – 进程内存不足我需要执行它的每个承诺串联,而不是并行,我认为这是什么节点它的事情。 我不应该使用新的库,但是我愿意考虑答案! 编辑: 以下是一段代码示例: function getInfoForEveryInnerArgument(InnerArray) { const CPTPromises = _.map(InnerArray, (argument) => getDBInfo(argument)); return Promise.all(CPTPromises) .then((results) => { return doSomethingWithResults(results); }); } function mainFunction() { BigArray = [[argument1, argument2, argument3, argument4], [argument5, argument6, argument7, argument8], ….]; //the summ of all arguments is over 60k… const […]

如何跳过一个链条的承诺

我在一个nodejs项目中工作,并希望跳过链中的承诺。 以下是我的代码。 在第一个promise块中,它将parsing一个值{success: true} 。 在第二部分,我想检查success的价值,如果是真的,我想把价值返回给被调用,并跳过这个链中的其余承诺; 而如果价值是假的,则继续连锁。 我知道我可以抛出一个错误或拒绝它在第二块,但我必须处理错误的情况下,这不是一个错误的情况下。 那么我怎么能在诺言链中实现呢? 我需要一个解决scheme,不带任何其他第三方库。 new Promise((resolve, reject)=>{ resolve({success:true}); }).then((value)=>{ console.log('second block:', value); if(value.success){ //skip the rest of promise in this chain and return the value to caller return value; }else{ //do something else and continue next promise } }).then((value)=>{ console.log('3rd block:', value); });

Firebase的JavaScript承诺在NodeJS

我需要为一些复杂的业务逻辑部署一个node.js服务器。 是否有任何firebase库/模块,允许我使用承诺,而不是callback的查询和更新/设置方法? 我find了firebase-client,但它是基于REST的。 我更喜欢基于JavaScript API的,如果有一个呢? 谢谢。