简短的承诺

时间:2014-12-11 09:45:38

标签: javascript angularjs promise angular-promise

我正在创建一个延迟,然后在涉及异步行为的函数中返回一个promise。

var deferred = $q.defer();
//...make use of the deferred
return deferred.promise;

我想在函数顶部添加一个快捷方式,它将绕过异步活动,并立即有效地返回已解决的承诺。我该怎么做?

e.g。这会是惯用的吗?

if (shouldShortcut) {
    return $q.when(true);
}

2 个答案:

答案 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"