5

私は2つの簡単な方法を持っています:

 function do(x,y){
   if(x){
    XHR1().success();
   }
   if(y){
    XHR2().success();
   }
}

function done(){
   return something;
}

done()今、私は終了時に必ず呼び出したいと思いdo()ます (**do() メソッドには Mysql DB への非同期要求が含まれています)

どうすればこれを達成できますか?**

明らかに、これはそのようなメソッドを順番に並べません:

do(x=1,y=1);

done(); //this can run also if do() has not finished yet

だから私は試しました:

function do(x,y,_callback){
       if(x){
        XHR1().success();
       }
       if(y){
        XHR2().success();
       }

      _callback();
    }

    function done(){
       return something;
    }

do(x=1,y=1,done()); // this won't work the same cause callback is not dependent by XHR response

これは私が約束に使用するものですhttps://github.com/tildeio/rsvp.js/#arrays-of-promises

4

3 に答える 3

5

プロミスについては知っていますが、シンタックスに入れる方法がわかりません

それが promise を返すと仮定するとXHR()、コードは次のようになります。

function do(x,y) {
    var requests = [];
    if (x)
        requests.push( XHR1() );
    if (y)
        requests.push( XHR2() );
    return RSVP.all(requests);
}
function done(){
    return something;
}

do(1, 1).then(done);
于 2014-02-20T16:41:32.570 に答える
4

node.js は本質的に非同期であるため、通常の命令型制御フローは機能しなくなりました。いくつかのオプションがありますが、そのうち 2 つが最も広く使用されています。

  1. コールバック。2 番目のメソッドを引数として最初のメソッドに渡すことができます。次に、最初に、タスクが完了したら、渡されたコールバックを実行します。このアプローチの欠点は、通常、ノード コミュニティでは「コールバック地獄」と呼ばれています。メソッドが 2 つではなくそれ以上の場合は、コールバックを何度も渡してネストする必要があり、巨大なネスト構造が作成されます。

  2. 約束を使用します。promises パターンを実装するライブラリは多数あります。つまり、promise を使用すると、各メソッドから Promise オブジェクトを返すことができます。promise は、将来その作業を完了するオブジェクトです。その上でメソッドを呼び出すことができ、終了後に何が起こる必要があるかを知らせます。詳細については、この記事をご覧ください: Node.js での promise の理解

于 2014-02-20T16:07:45.293 に答える