我有一些关于某些逻辑的代码。
我的以下代码块按预期工作,因此willbeUpdated
变量无法以同步方式逐字更新。
var willbeUpdated = 1;
anArray.forEach(function(i){
getPromisedData(i).then(function(d){
willbeUpdated += d;
});
});
if (wiillbeUpdated == something) {
// some logic
}
所以问题是,我是否必须为该foreach逻辑再次创建另一个承诺的方法并将outside if logic
放在其当时的方法中,这将是最佳实践,还是在这种情况下的任何其他更好的想法?
编辑:我问这个问题,听听有关嵌套异步函数处理的最佳或更好的方法,而不是确切的代码块,谢谢。
答案 0 :(得分:2)
var willbeUpdated = 1,
promises = [];
anArray.forEach(function(i){
promises.push(getPromisedData(i));
});
Promise.all(promises).then(function() {
// some logic
});
答案 1 :(得分:1)
我认为你要找的是将if块(willBeUpdated == something
)放在getPromisedData
解析的函数中。
所以:
var willbeUpdated = 1;
anArray.forEach(function(i){
getPromisedData(i).then(function(d){
willbeUpdated += d;
if (wiillbeUpdated == something) {
// some logic
}
});
});
会好好的。如果你能让我更好地了解你想要做什么,那么可能会有更好的解决方案。
答案 2 :(得分:1)
q
和许多其他的promise库可以处理promise数组,并等待它们的结果。
var q = require('q');
var willbeUpdated = 1;
var todo = [];
anArray.forEach(function(i){
todo.push(getPromisedData(i).then(function(d) {
return (willbeUpdated+= d);
}));
});
q(todo).then(function() {
if (wiillbeUpdated == something) {
// some logic
}
});