我正在创建一个延迟,然后在涉及异步行为的函数中返回一个promise。
var deferred = $q.defer();
//...make use of the deferred
return deferred.promise;
我想在函数顶部添加一个快捷方式,它将绕过异步活动,并立即有效地返回已解决的承诺。我该怎么做?
e.g。这会是惯用的吗?
if (shouldShortcut) {
return $q.when(true);
}
答案 0 :(得分:2)
您可以立即解决延迟,但仍然会返回其承诺:
if (shouldShortcut) {
deferred.resolve();
return deferred.promise;
}
答案 1 :(得分:2)
编辑:我现在看到您正在谈论的是$ q而不是Q.请参阅下面我之前回答的中断,因为它与Q库有关。
根据Benjamin Gruenbaum的评论(他已删除),$q.when()
是一个很好的方法:
var resolvedPromise = $q.when();
您可以通过将其传递到when()
:
var resolvedPromise = $q.when("all good");
这里没有必要涉及延期。事实上,我建议限制你使用延期,因为它们很可能很快就会过时,转而支持ES6中使用的revealing constructor pattern。
(上一个答案)
Q库提供了一种与ES6承诺标准一致的方法:
Q.Promise.resolve();
这产生了一个已解决的承诺。
如果要使用特定值解析它,可以传入该值:
Q.Promise.resolve("all good"); // promise resolved with the value "all good"