我的情景:
在forEach循环中,我执行了一个带回调的函数,如下所示:
var rows = [];
rows.forEach(function(elem, i){
///done some stuff
client.search(query).then(function(facResult){
//done some stuff
});
});
我的问题是第一次迭代" client.search(查询)"在完成这个东西之前执行第二次迭代,因为client.search(query)
是用回调执行的。我必须先将所有结果推送到数组中。
所以在我获得第一个结果之前,第二个是附加的,有时我甚至没有得到第一个结果。
我必须按顺序执行for循环。我搜索了很多,一些建议是使用timedelay
,但我并不需要。{1}}。帮我解决这个问题。提前谢谢。
答案 0 :(得分:0)
由于使用'forEach',您遇到了竞争条件问题。不是将所有行都放入'行',而是使用'光标'。
您可以看到以下与您的用例类似的实现答案: https://stackoverflow.com/a/18119789/802651
答案 1 :(得分:0)
我使用了异步库,如下所示:
async.forEach(myVar.rows, function (elem, next){
client.search(query).then(function(facResult){
//done some stuff
if(--myVar.rows.length == 0){
loop finishes //done some stuff
}
});
});