1

この件に関して多くの質問があることは承知していますが、それらはすべて特定のケースに合わせて調整されています。私はこの質問をしており、この問題を調査するときに誰もが使用できる回答を期待しています.

順番に実行する必要がある 3 つの関数があり、それらはすべて非同期で何かを行うとします。

2 つの関数の場合、コールバックを使用すると簡単です。

var fOne = function(callback) {
  // do stuff
  callback();
};

var fTwo = function() {
  // do stuff
};

呼び出し:

fOne(fTwo);

fOne の完了後に fTwo が実行されるようにします。fOne の後に実行される fTwo の後に実行されるように、この場合に fThree をどのように追加しますか?

4

3 に答える 3

2

基本的に、私があなたの質問を正しく理解していれば、引数を fTwo に追加できるようにするためにラムダを fOne に渡し、次に fTwo にコールバックを収集させて、fOne のように呼び出す必要があります。

var fOne = function(callback) {
  // do stuff
  callback();
};

var fTwo = function(callback) {
  // do stuff
  callback();
};

var fThree = function() {
  // do stuff
};

fOne(function() { fTwo(fThree); }); // <- lambda
于 2013-03-26T18:20:59.557 に答える
1

私が思いついたもう1つのアプローチ:

var stack = [fOne, fTwo, fThree];
stack.shift()(function() {
    stack.shift()(stack[0]);
});

ファンクチンを次のように定義する場所:

function fOne(callback) {
    setTimeout(function() { // <-- example of async task
        alert('fOne done');
        callback && callback();
    }, 1000);
}

http://jsfiddle.net/kRMr8/2/

于 2013-03-26T18:50:29.813 に答える
1

deferred と promises を使用して同時非同期アクションを実行するのではなく、一方が完了したときに一方を開始するだけなので、3 番目のアクションを追加することはほぼ同じ方法になります。

var fOne = function(callback) {
   console.log('1')
   callback();
};

var fTwo = function(callback) {
   console.log('2')
   callback();
};

var fThree = function() {
   console.log('3')
};

fOne(function() {
    fTwo(function() {
        fThree();
    });
});

フィドル

于 2013-03-26T18:21:48.090 に答える