0

現在、Windows ストアの JavaScript アプリケーションに取り組んでおり、非同期 for ループの実装に行き詰まっています。

次のような単純な for ループを考えてみましょう

for(i=0,i<4,i++)
{
//body
}

上記のコードと同じプロセスを実行できる正確な asyncFor ループは何でしょうか

4

5 に答える 5

0

通常、ループを再帰的にコーディングする必要があります。つまり、非同期コールバックから次の再帰ステップを呼び出します。

function loop(i, n, body, callback) {
    if (i < n)
        body(i, function cb() {
            loop(i+1, n, body, callback);
        });
    else
        callback();
}

次に、次のように使用します

loop(0, 4, function(i, cb) {
    console.log(i);
    setTimeout(cb, 50); // or whatever async task with callback you have
}, function() {
    console.log("done everything");
});
于 2013-03-25T17:56:03.800 に答える
0
You can use a recursive function callback
 function test(){
  myCall(function(){
       alert("Hello world");
    },5);
 }
function myCall(callback , count){
      if(count === 0){
           return;
      }else{
         callback();
         count--;
      }
      myCall(callback , count);
}
于 2013-03-25T17:56:29.857 に答える
0

配列をループする場合は、これら 2 つのヘルパーが役立つ場合があります (より簡潔な表記のための CoffeeScript 構文)。モンキー パッチに抵抗がある場合は、気軽にスタンドアロン関数に変換してください。

# call function for each element in array
# returns when all promises have been completed
Array::eachAsync = (fn) ->
  promises = @map (item, index, collection) -> fn(item, index, collection)
  WinJS.Promise.join(promises)

# call function for each element in array in order
# returns when the last one has been processed
Array::sequentialEachAsync = (fn) ->
  @reduce (lastPromise, item) ->
    lastPromise.then () -> fn(item)
  , WinJS.Promise.wrap()
于 2013-03-26T11:18:11.707 に答える
0

あなたが正しいことを理解した場合にのみ...次のようなことを試すことができます:

function asyncFor(n, callback)
{
    var i=0;
    var t=setInterval(function(){
        callback();
        i++;
        if(i==n)
            clearInterval(t);
    }, 0);
}

asyncFor(4, function(){
    console.log('hello world');
});
console.log('after for'); 

そうでない場合-申し訳ありませんが、私の答えを無視してください

于 2013-03-25T17:47:17.867 に答える
0

コールバック関数を使用します。

someFunction = function(data, ...){
    someAsyncFn(someFunction); //use this function as the callback
}
于 2013-03-25T17:35:27.590 に答える