2017-05-03 5 views
0

私は約束の仕組みを理解しようとしましたが、何故私のボタンを数回押す必要があるのか​​分かりません。複数の約束を結ぶ

  1. 最初の関数は新しいユーザーを作成し、約束を返します。
  2. ユーザーが車を持っている場合は、2番目のシステムを更新します。
  3. 車のIDを受信したときに、3番目にユーザーオブジェクトを更新する必要があります。

ボタンを押すと、CreateUserが発砲されます。もう一度ボタンを押すとUpdateModelも発火します。

+0

あなたは '.then()'に渡された関数から約束を返さないので、promise * it *が返すものは何も待たないでしょう。 – Ryan

+0

このコードでは、ネスティングの約束事が問題の1つですが、実際の問題はボタンのクリックを処理するコードにある可能性があります。 – Joseph

+0

[.then()チェーン内の以前の約束結果にアクセスするにはどうすればよいですか?](http://stackoverflow.com/questions/28250680/how-do-i-access-previous-promise-results-in- a-then-chain) –

答えて

0

あなたが達成しようとしていることは約束ではかなり難しいです。私はあなたの質問に直接答えないで、間接的に答えて、あなたがワークフローに関連するかもしれないすべての同様の問題を手助けする危険を冒すでしょう。 async libraryにお電話ください。

このライブラリは、現在直面している「コールバック地獄」を解決することを目的としています。同期プログラミングのバックグラウンドからくると、関数の出力を次の関数への入力として使用できると考えるのは当然です。 Async、滝はコールバック地獄の構造を隠して、私たちのためにそれを正確に行います(神に感謝します)。だからあなたの問題の解決策は、単純に(非同期のドキュメントからコピーされた)この構造では、あなたの関数を置くことになります。

async.waterfall([ 
    function(callback) { 
     callback(null, 'one', 'two'); 
    }, 
    function(arg1, arg2, callback) { 
     // arg1 now equals 'one' and arg2 now equals 'two' 
     callback(null, 'three'); 
    }, 
    function(arg1, callback) { 
     // arg1 now equals 'three' 
     callback(null, 'done'); 
    } 
], function (err, result) { 
    // result now equals 'done' 
}); 

ので、これはあなたがほとんど戻って、同期言語に行くように感じることができます!関数を並列または直列で実行する必要がある場合は、async.parallelまたはasync.eachを使用できます。他にもたくさんの機能があります。

私が言ったように、これはあなたの問題を解決する答えですが、あなたが尋ねたやり方とは厳密には一致しません。この連鎖コールバックの内部動作がどのようになっているのか不思議であれば、私の答えは無視してください。

乾杯!

関連する問題