[英]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.