Node.js q、 js:我可以停止一个函数的执行直到一个承诺实现吗?

Node.js q、 js:我可以停止一个函数的执行直到一个承诺实现吗?,node.js,q,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'为true,如果为false则抛出一个错误(要求调

例如:

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

通过定义以下函数,您可以:

function do_this(err) {
    // yay.
}

if(foo) {
    async_call(arguments, do_this); 
} else {
    do_this();
}
Q.when()
可以用于此目的,因为您不知道某个值是否是承诺

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

我差不多是用Q库做的,请看我编辑的答案。谢谢你的意见:)太好了,这就是我想要的!谢谢请注意,规范形式是
Q(valueOrPromise)。然后(oncompleted)
Q.when(valueOrPromise,oncompleted)
。你的也可以,但不太地道:)