Javascript Node.js Promise.all()挂起
有点被这个卡住了。在node.js上使用Javascript Node.js Promise.all()挂起,javascript,node.js,promise,Javascript,Node.js,Promise,有点被这个卡住了。在node.js上使用 exports.count = function ( models, callback ) { var promises = []; models.forEach(function ( name ) { promises.push( countOne( name ) ); }); Promise.all( promises ).then(function ( res ) { callback( null, res );
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.resolve会给出适当的响应。您的一个承诺没有解决问题,在这种情况下,您需要找出是哪一个 我认为您正试图使用
控制台.log
来实现这一点。如果您使用forEach这样做,您可以将日志消息附加到所有承诺上,并查看哪个承诺没有得到解决/拒绝
或者其中一个承诺是拒绝,这是你没有处理的
我冒昧地重写了您的代码,尝试如下:
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);
});
};
我在回拨中离开了,但我真的会回报承诺,更简单,更干净
普罗蒂普™:切换到,并用一行替换您的实现:
exports.count = function (models, callback) {
Promise.map(models, countOne).nodeify(callback);
}
在
中实现一个(或多个)承诺可能会更快。所有的都没有解决,没有人拒绝(也不是承诺[0]
。就是这样。如果你只是返回承诺而不是使用回调,这会更干净,你也不会传播错误现在是对的第一次回调。然后()
仅用于履行(全部已解决)。你没有提供任何在拒绝时要做的事情,所以它会默默地失败。哦,是的,其中一个可能实际上是拒绝的,我忘记了,然后承诺甚至不会检测到未处理的异常,如蓝鸟承诺或Firefox中的本机承诺。@BenjaminGruenbaum我在蓝鸟中得到了纠正,整个代码都是Promise、 map(models).nodeify(callback)
尽管混合回调在这里很愚蠢。当然,在这个论坛上重写某人的代码并不是一种自由。从实用角度讲,重写代码不是StackOverflow存在的理由吗?