在以下示例中,我想有条件地执行somePromise
,然后无论条件如何执行anotherPromise
。
if (somecondition) {
somePromise().then((args) => { ... } );
}
// Not waiting for somePromise() here, but it should.
return anotherPromise().then((args) => {
muchmorecodehere;
}
我现在能想到的唯一方法是将最后一部分变成一个函数并在两个分支中执行它,但这看起来非常麻烦。我当然做错了什么?
let helperFunction = () => {
return anotherPromise().then((args) => {
muchmorecodehere;
}
}
if (somecondition) {
return somePromise().then((args) => { ... } ).then(helperFunction);
}
return helperFunction;
答案 0 :(得分:2)
你可以利用这样一个事实:.then()
会返回一个新的承诺并链接掉那个或虚假的承诺:
var nextPromise = somecondition
? somePromise.then((args) => { ... })
: Promise.resolve();
return nextPromise.then(() => anotherPromise)
.then((args) => {
// muchmorecodehere
});
答案 1 :(得分:1)
您可以为条件部分创建默认的,已解决的,承诺(让我们称之为conditionalPromise
),并始终将此承诺与anotherPromise
链接起来。
如果someCondition
为false
,那么conditionalPromise
是已经解决的承诺,可以安全地链接到anotherPromise
。
如果someCondition
为true
,则somePromise
已分配给conditionalPromise
,当解决后,anotherPromise
将会被执行。
conditionalPromise = Promise.resolve(); // Create a default, already resolved, promise
if (someCondition) {
// Assign somePromise to conditionalPromise, overwriting the default one
conditionalPromise = somePromise
}
// Now chain the 2 promises
return conditionalPromise.then((args) => {
anotherPromise.then((args) => {
muchmorecodehere;
}
});
答案 2 :(得分:0)
解决问题的另一种方法是将if
块中的初始then
包裹起来,将其链接到Promise.resolve()
。
return Promise.resolve().then(() => {
if (somecondition) {
return somePromise().then((args) => { ... } );
}
}).then(() => {
return anotherPromise();
}).then((args) => {
//muchmorecodehere
});