>我调用一个函数,
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
的作业包装在一个承诺中,然后getResponse
then()
有能力,但这似乎有点过分,因为我只有一个情况,我有一堆异步工作正在做来确定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,这可能没有用