Angularjs 角链中的可选第一承诺

Angularjs 角链中的可选第一承诺,angularjs,angular-promise,Angularjs,Angular Promise,我有2个$http调用返回承诺,但第一个是可选的。我相信我必须首先使用$q.defer()创建一个承诺,但我遗漏了一些东西 以下是我的非工作尝试: var p = $q.defer(); if (condition) { p = p.then(doOptionalFirst()); } return p.then(doOther()); 什么是正确的语法来链接这两个调用,第一个是可选的?使用$q.when(或使用AngularJS 1.4.1)创建一个已解决的承诺 var p = $q

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

以下是我的非工作尝试:

var p = $q.defer();
if (condition) {
  p = p.then(doOptionalFirst());
}  
return p.then(doOther());
什么是正确的语法来链接这两个调用,第一个是可选的?

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

var p = $q.resolve();
if (condition) {
    p = p.then(doOptionalFirst);
}
return p.then(doOther);
如果您使用的是延期付款,则必须链接到
.promise
,然后在适当的时间解决延期付款。在这种情况下,您可以考虑如果<代码>条件< /代码>是真的,则延迟被自动解析。因此,只需使用已解析的承诺,您就可以跳过一些额外的可能令人困惑的代码

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