如果我的函数中有一个简单的条件(在下面的示例中),doFinalCheck()
是否总是最后执行?如果 doThis()
或 doThat()
是 API 请求并且需要一些时间才能完成,那么 doFinalCheck()
是否会在API 请求?
checkSomething(array){
if (array){
doThis();
}
else {
doThat();
}
doFinalCheck();
}
最佳答案
...would
doFinalCheck()
always be executed last?
是的,除非doThis()
/doThat()
抛出异常。但请继续阅读。
If
doThis()
ordoThat()
are API requests and would take a bit of time to complete, woulddoFinalCheck()
get executed before the API requests?
这取决于 doThis()
和/或 doThat()
是同步还是异步。
如果它们同步,是的,onFinalCheck()
将等待它们完成。
如果它们是异步的,onFinalCheck()
将等到 doThis()
/doThat()
调用已完成,但该调用只是开始该过程。然后该过程继续并异步完成。因此 onFinalCheck()
将在该过程完成之前被调用。
如果您正在处理异步操作,请查看 promises和新的(ES2018)async
functions .
例如,if doThis()
/doThat()
是异步的,if 它们返回一个 Promise ,然后您可以让 onFinalCheck()
等待操作完成,如下所示:
// I assume this is in an object initializer or `class`
async checkSomething(array){
// ^^^^^
if (array){
await doThis();
// ^^^^^
}
else {
await doThat();
// ^^^^^
}
doFinalCheck();
}
与所有async
函数一样,checkSomething
将返回一个promise。
或者,如果由于某种原因您无法使用 async
函数,但您可以使用 Promise 和 doThis()
/doThat()
返回 promise ,然后:
// I assume this is in an object initializer or `class`
checkSomething(array){
return (array ? doThis() : doThat())
.then(result => {
doFinalCheck();
return result;
});
}
请注意,checkSomething
返回上面的 promise 。如果没有任何东西会使用该 promise ,则不要返回并内嵌错误检查:
// I assume this is in an object initializer or `class`
checkSomething(array){
return (array ? doThis() : doThat())
.then(result => {
doFinalCheck();
})
.catch(error => {
// ...handle/report the error...
});
}
关于Javascript 条件执行流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51366105/