6

例として:

if(foo) {
    async_call(); // returns a Q promise object
}
// do this immediately if foo was false 
// or after the promise is resolved if foo was true

これも可能ですか?

私が見ることができる代替案は、常に非同期関数を呼び出し、「foo」チェックをスローすることです。これは最適ではありませんが、コード内で機能します。または、「foo」がtrueであると想定し、falseの場合はエラーをスローします(非同期関数自体を呼び出した後に呼び出し元が再試行する必要があります)。これは、明らかな理由からさらに理想的ではありません。

編集:一時的な回避策として、私はこれが機能することを発見しましたが、それはほとんど理想的ではありません:

var promise = foo ? Q.defer().resolve(foo).promise : async_call();
promise.then(function(foo) {
    // this is done after the async call if it was necessary or immediately if not
});
4

2 に答える 2

6

Q.when()値が約束であるかどうかわからない場合は、まさにこれに使用できます。

Q.when(foo || async_call()).then(function (foo) {
  //...
});
于 2013-03-27T11:13:13.660 に答える
0

次のような関数を定義することで、次のことができます。

function do_this(err) {
    // yay.
}

if(foo) {
    async_call(arguments, do_this); 
} else {
    do_this();
}
于 2013-03-27T10:05:44.040 に答える