缩短承诺

Short-cutting a promise

本文关键字:承诺      更新时间:2023-09-26

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

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

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

例如,这会是惯用语吗?

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

您可以立即解决延迟,但仍返回其承诺:

if (shouldShortcut) {
  deferred.resolve();
  return deferred.promise;
}

编辑:我现在看到你说的是$q而不是Q。请参阅下面的中断,了解我之前的答案,因为它与 Q 库有关。

根据Benjamin Gruenbaum下面的评论(他后来删除了),$q.when()是一个很好的方法:

var resolvedPromise = $q.when();

您可以通过将其传递到when()中来解析特定值:

var resolvedPromise = $q.when("all good");

这里没有必要涉及延期。事实上,我建议限制延迟的使用,因为它们很可能很快就会过时,转而支持ES6中使用的揭示构造函数模式。

<小时 />

(上一个答案)

Q 库提供了一种与 ES6 承诺标准一致的方法:

Q.Promise.resolve();

这会产生一个决心的承诺。

如果要使用特定值解析它,可以传入该值:

Q.Promise.resolve("all good");  // promise resolved with the value "all good"