[英]Node.js Promise.all() hanging
有点卡在这一个。 在node.js上使用https://github.com/then/promise
exports.count = function ( models, callback ) {
var promises = [];
models.forEach(function ( name ) {
promises.push( countOne( name ) );
});
Promise.all( promises ).then(function ( res ) {
callback( null, res );
});
Promise.resolve(promises[0]).then(function (res) {
console.log('resolved individual with res', res);
});
};
function countOne ( exampleArg ) {
return new Promise(function ( resolve, reject ) {
// It resolves or rejects
});
}
我也尝试过:
Promise.all( promises.map(function ( it ) { return Promise.resolve(it); }) ).then(function ( res ) {
callback( null, res );
});
无论哪种方式,Promise.all都不会触发。 Promise.resolve确实给出了适当的响应。
否则,您的承诺之一就是没有兑现,在这种情况下,您需要找出哪一个。
我认为您正在尝试使用console.log
做到这一点。 如果使用forEach做到这一点,则可以将日志消息附加到所有promise,并查看哪个未解决/拒绝。
或者其中一项承诺是拒绝,您没有处理。
我自由地重写了代码,可以这样尝试:
exports.count = function (models, callback) {
var allCounts = models.map(countOne);
// second parameter is the onRejected handler
Promise.all(allCounts).then(function (res) {
callback(null, res);
}, function (err) {
callback(err);
});
promises[0].then(function (res) {
console.log('resolved individual with res', res);
});
};
我离开了回调,但实际上我只是返回了诺言,变得更加简单,清晰。
ProTip™:
切换到bluebird promise库 ,并用一行替换您的实现:
exports.count = function (models, callback) {
Promise.map(models, countOne).nodeify(callback);
}
可能会更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.