2016-11-09 6 views
-3

私は約束から結果をテストする必要があります。約束が時間内に解決され、条件付きの一部になるのだろうか?約束が時間内に条件付きになることを解決しますか?

if (myPromise() > 15 && myOtherPromise()) { 
    // do stuff when myPromise resolves to over 15 and myOtherPromise is true 
} else { 
    // do stuff when myPromise resolves to 15 or less or myOtherPromise is false 
} 

または私はちょうどそれを吸うために必要としますか:

let myP = myPromise(); 
let myOtherP = myOtherPromise(); 

promise.all([myP, myOtherP]).then(function(res) { 
    if (res[0] > 15 && res[1]) { 
     // do stuff when myPromise resolves to over 15 and myOtherPromise is true 
    } else { 
     // do stuff when myPromise resolves to 15 or less or myOtherPromise is false 
    } 
}); 

は皆のための以下のコメントの質問に「downvoting」と、これは繰り返しである考えから転載。

まあ、はい、いいえ。いいえ、私がJasmineと仕事をしているからです.Jasmineは、期待通りに通話が成功すると自動的に約束を解決します。 expect(myPromise()).toBeGreaterThan(15)。だから、外部からは、比較を実行する前にifの条件が約束を解決するかもしれないと考えられたかもしれない。 myPromisemyOtherPromiseと仮定すると

+0

あなたは(知ることができませんこれが非同期のポイントです)。ちょうど "それを吸う"またはコールバック関数を呼び出す – nicovank

+0

まあ、はいといいえ。いいえ、私がJasmineと仕事をしているからです.Jasmineは、期待通りに通話が成功すると自動的に約束を解決します。 'expect(myPromise()).BeGreaterThan(15)'。だから、外部からは、比較を実行する前にifの条件が約束を解決するかもしれないと考えられたかもしれない。 – Machtyn

+0

@Machtyn 'if'であり、他の制御フロー構造は約束をサポートしていません。それらの非同期バージョンを持つことは興味深いでしょうが、私はそのための提案を知らない。 – ssube

答えて

0

は、あなたのコードは、その後NOあなたが行うことができない、示しているようだ約束を返す関数です:

if (myPromise() > 15 && myOtherPromise()) { 

約束はオブジェクトです。だから、myPromise()戻り、その後の約束、もし:

if (myPromise())` 

は常にtruthyであり、そのif文が約束の最終的な解決された値とは全く関係ありません。だから、最初のifステートメントはどちらの約束の解決された値もチェックしません。


あなたがpromoiseの解決された値を参照したい場合は、解決された値を取得するために.then()または.all()のようなものを使用する必要があります。解決された値にアクセスする他の方法はありません。

あなたがmyPromise()myOtherPromise()の解決された値の両方を調べたい場合は、あなたが解決するためにそれらの両方を待機しなければならないと、あなたの2番目のコード例のようにPromise.all()を使用する必要があります。

Promise.all([myPromise(), myOtherPromise()]).then(function(results) { 
    if (results[0] > 15 && results[1]) { 
     // got the result we wanted 
    } 
}).catch(function(err) { 
    // error here 
}); 
+0

なぜdownvote? – jfriend00

+0

ええと、私はmyOtherPromise()を行ったときにそれを認識して、代わりにmyOtherPromise()== trueを "bad"の例で実行していたはずです。 – Machtyn

+0

@Machtyn - Huhhh? 'myOtherPromise()== true'はあなたにも良いことをしません。約束は目的です。あなたは 'p.then()'や 'Promise.all([p1、p2])'のようなものでのみ価値を得ることができます。 'if(p)'で値を決して得ることはできません。 – jfriend00

関連する問題