Javascript Node.js Promise.all()挂起

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 );

有点被这个卡住了。在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 );
  });

  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存在的理由吗?