在node.js中,我有一个Promises数组,但是当我想执行Q.all().then();时过程中,似乎什么也没有发生。也许我的数组中有一个 Unresolved promise 并且它阻止了进程?我不太确定我在这里做什么,但我的目标是一次性执行所有这些函数,然后取回完整的“ token ”数组以将其发送到另一个文件中。
我该怎么办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);
}
我的“ 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();
已替换为
var pipo = [];
然后我使用“async”并使用 map 而不是“forEach”
async.map(pipo, function (item,callback)
{
...
});
就像@Kato 所说,错误是我的 promise 之一被拒绝。我用这个调试了它:
let count = 0;
promises.forEach(() => console.log(++count, 'done'));
最后,我使用了Q.all()方法和.then()以及最重要的.catch()!再次感谢你们帮我解决这个问题。
关于javascript - Node.js Q.all() 和 Promise 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41946239/