q.js:我可以停止执行函数,直到履行承诺为止?

时间:2013-03-27 10:02:19

标签: node.js q

举个例子:

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'为真并且如果它是假的则抛出错误(要求调用者在调用异步函数本身后再次尝试),这显然不太理想。

编辑:作为临时工作,我发现这有效,但这并不理想:

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
});

2 个答案:

答案 0 :(得分:6)

当你不知道某个值是否是一个承诺时,

Q.when()可以用于这个。

Q.when(foo || async_call()).then(function (foo) {
  //...
});

答案 1 :(得分:0)

您可以通过定义以下函数来实现:

function do_this(err) {
    // yay.
}

if(foo) {
    async_call(arguments, do_this); 
} else {
    do_this();
}