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