Angular 链中可选的第一个承诺

Optional first promise in Angular chain

我有 2 个 return 承诺的 $http 调用,但第一个是可选的。我相信我必须首先使用 $q.defer() 创建一个承诺,但我遗漏了一些东西。

这是我的无效尝试:

var p = $q.defer();
if (condition) {
  p = p.then(doOptionalFirst());
}  
return p.then(doOther());

将这 2 个调用与第一个可选的链接起来的正确语法是什么?

使用 $q.when(或 $q.resolve 和 AngularJS 1.4.1)来创建一个已经解决的承诺。

var p = $q.resolve();
if (condition) {
    p = p.then(doOptionalFirst);
}
return p.then(doOther);

如果您正在使用延迟,则必须链接到 .promise,然后在适当的时候解决延迟。在这种情况下,您可以考虑如果 condition 为真,则自动解析延迟。因此,您可以仅使用已解决的承诺来跳过一些额外的可能令人困惑的代码。