异步计算时的问题是元素没有按顺序处理。关键是要跟踪已经处理的结果数量,然后才调用 store 方法。最有效的方法是将对 store 方法的调用移到回调中。这样,您可以在检查最后一个元素成功后直接调用它,而不必在检查标志条件时进行忙碌/等待。另一种可能性是在处理最后一个元素时引发一个事件,并在事件处理程序(或类似的东西)中进行存储。
var x = [ele1,ele2,ele3] ;
var expectedResults = 0;
var results = 0;
x.forEach(x,function(ele,index) {
if (ele == "some specific object") {
++expectedResults;
}
});
x.forEach(x,function(ele,index){
if (ele == "some specific object"){
MyAPI.process("command",function(result){
x[index] = result;
if (++results == expectedResults) {
database.store(x);
}
});
}
});