Node.js Q.all()和promise数组

在node.js中,我有一个Promises数组,但是当我想执行Q.all()。then(); 过程,似乎没有任何事情发生。 也许在我的arrays中有一个未解决的承诺,它阻止了这个过程? 我不确定我在这里做什么,但我的目标是一次执行所有这些function,然后取回我的完整的“令牌”数组发送到另一个文件。
我怎样才能正确使用Q.all()?

var pipo = new Array(); var ref_accounts = firebase.database().ref('accounts'); geoQuery.on("key_entered", function(lakey, location, distance) { pipo[lakey] = lakey; }); // I have here my pipo Array full of data var promises = []; var token = []; for (var key in pipo) { var deferred = Q.defer(); var ref = firebase.database().ref("etablissements").orderByKey().equalTo(value).on("child_added", function(snapshot) { var data = snapshot.val(); if ((data.alerte != false) && (data.categorie === categories)) { var ref2 = firebase.database().ref("accounts").orderByKey().equalTo(value).on("child_added", function(snapshot2) { var data2 = snapshot2.val(); if (data2.token != null) { token.push(data2.token); deferred.resolve(data2); } else { deferred.reject(); // or deferred.resolve(); ?? } }); } else { deferred.reject(); // or deferred.resolve(); ?? } }); promises.push(deferred.promise); } 

我有我的“承诺”数组已满,现在我想在这里执行所有在一次,然后获得所有的TOKEN捕获在数组

  Q.all(promises).then(function(results) { var uniqueNames = []; for (i = 0; i < token.length; i++) { if (uniqueNames.indexOf(token[i]) === -1) { uniqueNames.push(token[i]); console.log('tokens' + token[i]); } }, // error function(response) { console.log('Error in then' + response); }).catch(function(error) { console.log('CATCH ERROR' + error); }); // Send token array to the API }); 

我真的不明白这个过程。 你能解释一下这个代码有什么问题吗?

我用这个成功了:

 var pipo = new Array(); 

被replace

 var pipo = []; 

然后我使用“asynchronous”,并使用地图,而不是“forEach”

 async.map(pipo, function (item,callback) { ... }); 

像@加藤说,错误是我的承诺之一被拒绝。 我用这个debugging它:

 let count = 0; promises.forEach(() => console.log(++count, 'done')); 

最后,我使用Q.all()方法.then ()和最重要的.catch() !!! 再次感谢你帮我解决这个问题。