1

私はいくつかの非同期操作を行う関数を持っています:

function funcAsynch() {
    // asynch operations
}

さて、この関数を呼び出して、すべての非同期操作が終了したときに実行するコールバックを宣言したいと思います。

のようなもの

customCallback(funcAsynch(), function () { 
    alert("all asynch operations are finished") 
});

どうすればいいですか?

4

3 に答える 3

1

関数のパラメーターを定義しますfuncAsynch()

function funcAsynch(callback) {
    // asynch operations
    // invoke callback() when asynch is done
}

そして、コールバック関数をそのパラメーターに渡します。

funcAsynch(function () { 
    alert("all asynch operations are finished");
});
于 2012-10-29T15:10:37.157 に答える
1
function doSomething(callback) {
    // ...

    // Call the callback
    callback('stuff', 'goes', 'here');
}

function foo(a, b, c) {
    // I'm the callback
    alert(a + " " + b + " " + c);
}

doSomething(foo);
于 2012-10-29T15:11:00.073 に答える
0

ちょっとしたヘルパー関数:

function asyncFn() {
  var readyList = [],
       isReady = false;

  function emitReady() {
    isReady = true;
    var i = 0,
        len = readyList.length;

    for ( ; i < len; i++ ) {
      emit( readyList[i] );
    }
  }
  function emit( fn ) {
    fn();
  }
  function ready( fn ) {
      if ( !isReady ) {
        readyList.push( fn );
      }
      else {
        emit( fn );
      }
    }

  return {
    ready: ready,
    emitReady: emitReady
  };
}

ユースケース1

function F() {
    var async = asyncFn();

    async.ready(function() {
        // Called when emitReady is called
    });

    async.emitReady();
}

ユースケース2

function customAsync() {
  var async = asyncFn();

  /*
    Async stuff going on here....
  */
  setTimeout(function() {
    async.emitReady();
  }, 500);

  return async;
}

function customCallback(def, callback) {
  def.ready(callback);
}


customCallback(customAsync(), function() {
  console.log("async is operated");
});

たった1つのアプローチ...

于 2012-10-29T15:28:53.733 に答える