如何有条件地等待承诺解决?



>我调用一个函数,

getResponse(Math.random());
doSomethingWith(someVar);

getResponse(num) {
if(num > 0.8) someVar = "whee";
if(num > 0.5) someVar = "whoo";
if(num > 0) callSomeOtherFunctionWhichDoesABunchOfDatabaseQueriesThatUsePromisesAndEventuallySetssomeVar();
}

有没有办法等待callSomeOtherFunctionWhichDoesABunchOfDatabaseQueriesThatUsePromisesAndEventuallySetssomeVar()完成并设置someVar?我想我也可以把someVar的作业包装在一个承诺中,然后getResponsethen()有能力,但这似乎有点过分,因为我只有一个情况,我有一堆异步工作正在做来确定someVar

注意

,在下面的代码中callSomeOtherFunctionWhichDoesABunchOfDatabaseQueriesThatUsePromisesAndEventuallySetssomeVar替换为someFunc:p

getResponse 需要始终返回承诺

所以

function getResponse(num) {
return Promise.resolve()
.then(() => {
if (num > 0.8) {
someVar = "whee";
return;
}
if (num > 0.5) {
someVar = "whoo";
return;
}
if (num > 0) {
return someFunc();
}
});
}

请注意 - 原始代码中的逻辑(几乎)总是运行那个冗长的函数,因为 Math.random() 几乎总是> 0

代码的其余部分只是

getResponse(Math.random())
.then(() => doSomethingWith(someVar));

如果someFunc解析为它设置 someVar 的值,则可以使代码更好一些

var getResponse = num => Promise.resolve()
.then(() => {
if (num > 0.8) {
return "whee";
}
if (num > 0.5) {
return "whoo";
}
return someFunc();
});
getResponse(Math.random())
.then(someValue => doSomethingWith(someValue));

但如果以其他方式使用 someVar,这可能没有用

最新更新