如何使用异步功能解决以下问题

时间:2012-12-17 03:23:41

标签: javascript asynchronous

我有一个javascript数组。我需要处理这个数组的每个元素,然后将整个数组存储到一个对象存储中。我对元素进行的处理应该是异步的。如下面的方法所示。

var x = [ele1,ele2,ele3] ; 

x.forEach(function(ele,index){

if(ele == "some specific object"){
MyAPI.process("command",function(result){ 

x[index] = result; 
});

database.store(x); 

1 个答案:

答案 0 :(得分:0)

异步计算时的问题是元素不按顺序处理。关键是要跟踪当时处理的结果数量,然后才调用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);
           }
        });
    }
});