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

举个例子:

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 

这甚至有可能吗?

我可以看到的替代scheme要么总是调用asynchronous函数,抛出'foo'检查,这是不太理想的,但将工作在代码中; 或者假设'foo'是真的,如果它是假的,则抛出一个错误(要求调用者在调用asynchronous函数本身之后再次尝试),这对于显而易见的原因来说更不理想。

编辑:作为一个临时的工作,我发现这个作品,但它并不理想:

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

Q.when()可以用于这个,当你不知道一个值是否是一个承诺。

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

您可以通过定义一个函数,如:

 function do_this(err) { // yay. } if(foo) { async_call(arguments, do_this); } else { do_this(); }