1

同じ非同期関数を複数回呼び出す必要がありますが、1 回の呼び出しが完了するまで (つまり、コールバック関数が実行されるまで) 呼び出す必要はありません。したがって、私のコードは次のようになります。

syncFunc(a, function() {
    syncFunc(b, function() {
        syncFunc(c, function() {
            syncFunc(.....)
        });
    });
});

どういうわけかこれを短縮することは可能ですか?私の最初のアイデアは、次のような for ループを使用することでした。

syncParams = [a, b, c, ...];
for(var i = 0;; i++) {
    syncFunc(syncParams[i], function() {
        if(i < syncParams.length - 1) {
            alert('finished');
            break;
        } else {
            continue;
        }
    }
}

しかし、ループへの継続と中断のための接続がないため、明らかにこれは機能しません。私の他のアイデアは、間隔を使用して 1 つの非同期呼び出しが終了したかどうかを毎秒チェックし、次のパラメーターを使用して次の非同期呼び出しを呼び出すことでしたが、これは複雑すぎるようです。ライブラリを使わずに簡単な方法はありますか?

編集:誰もライブラリの問題を理解していないため:私は PhoneGap モバイルアプリを開発しており、現在使用している IDE では、サードパーティのライブラリを含めることはあまり喜ばしくありません。また、これがどのように機能するのか興味がありました。

4

1 に答える 1

0

毎回異なる引数で関数を呼び出したいようです。次に、 async.forEachSeries が最も適切です。

毎回同じ引数で関数を呼び出したい場合は、async.whilst がうまく機能します。https://github.com/caolan/async/#whilsttest-fn-callback

@Jack によって言及されたこの質問には、自分で行うための良い答えがあります: How to sync JavaScript callbacks?

于 2013-05-14T13:40:49.097 に答える