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

这甚至可能吗?

我可以看到的替代方案要么总是调用 async 函数,而放弃“foo”检查,这不是最优的,但可以在代码中工作;或者只是假设 'foo' 为真,如果为假则抛出错误(要求调用者在调用异步函数本身后重试),由于显而易见的原因,这甚至更不理想。

编辑:作为临时解决方法,我发现这很有效,但这并不理想:

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 回答