0

私は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); 
4

1 に答える 1

0

非同期で計算する場合の問題は、要素が順番に処理されないことです。重要なのは、その時点で処理された結果の数を追跡し、そのときだけ store メソッドを呼び出すことです。最も効果的な方法は、store メソッドの呼び出しをコールバックに移動することです。そうすれば、フラグの状態をチェックしている間にビジー/待機を行う必要がなく、最後の要素のチェックが成功した後に直接呼び出すことができます。もう 1 つの可能性は、最後の要素が処理されたときにイベントを発生させ、イベント ハンドラー (または同様のもの) でストアを実行することです。

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);
           }
        });
    }
});
于 2012-12-17T03:28:24.300 に答える