Tag: 承诺

如何处理循环中的承诺?

这是我想要做的 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的,如果有一个呢? 谢谢。

在一个循环内承诺

在下面的代码中,我有一个无限循环,我不知道为什么会发生。 我最好的猜测是因为里面的函数是async的循环不等待它,所以循环不会停止。 解决这个问题的最好方法是什么? var generateToken = function(userId) { return new Promise(function(resolve, reject) { User.findOne({userId: userId}, function(err, user) { if (user !== null) { var loop = true; while (loop) { var token = Common.randomGenerator(20); (function(e) { User.find({tokens: e}, function(err, result) { if (err) { loop = false; reject('Error querying the database'); } else { if […]

如何理解这个Promise代码?

'use strict'; Promise.resolve(() => 'John') .then((args) => { console.log(args); throw new Error('ops') }) .catch((ex) => { console.log(ex) }) .then(() => { throw new Error('ups') console.log('Doe') }) 我想console.log(args); 应输出'John' ,但是当我运行这个代码,输出是[ [Function] ] 所以我很困惑。

Node.js Q承诺,为什么使用defer()的时候可以使用this()?

我想做一些事情: somePromiseFunc(value1) .then(function(value2, callback) { // insert the next then() into this function: funcWithCallback(callback); }) .then(function(dronesYouAreLookingFor){ // Have a party }) .done(); 它没有工作。 我无法得到它的工作。 我被build议使用defer()来达到这个目的。 他们自己的文档说,我们应该使用延迟callback式函数。 虽然这是令人困惑的,因为他们着名的金字塔榜样都是关于callback的,但是这个例子太抽象了。 因此,我看到很多使用defer的人,那就是我所做的: somePromiseFunc(value1) .then(function(value2) { var promise = q.defer(); funcWithCallback(function(err, dronesYouAreLookingFor){ if (!err) promise.resolve(dronesYouAreLookingFor); else promise.reject(new Error(err)); }); return promise.promise; }) .then(function(dronesYouAreLookingFor){ // Have a party }) .done(); 直到我通过检查源代码发现这也起作用: […]

node.js链多重承诺(mongoose)

以下是我正在处理的典型承诺函数。 var _delete = function(t, id) { return Promise.cast(Event.find({where: {id: id}}, {transaction: t})) .then(function(d){ if (d) { // ——- (*) return Promise.cast(d.updateAttributes({status: -1}, {transaction: t})) .then(function(){ // do inventory stuff return Promise.cast(Inventory.update({}).exec()) .then(function(d){ // do something }) }).then(function(){ // do product stuff return Promise.cast(Product.update({}).exec()) .then(function(d){ // do something }) }) } else { return Promise.reject('this […]