如果我的函数中有一个简单的条件(在下面的示例中),doFinalCheck()
总是最后执行吗?如果doThis()
或doThat()
是API请求,并且需要一些时间才能完成,doFinalCheck()
是否会在API请求之前执行?
checkSomething(array){
if (array){
doThis();
}
else {
doThat();
}
doFinalCheck();
}
最佳答案
... doFinalCheck()
总是最后执行吗?
是的,除非doThis()
/ doThat()
引发异常。但是继续阅读。
如果doThis()
或doThat()
是API请求,并且需要一些时间才能完成,doFinalCheck()
是否会在API请求之前执行?
这取决于doThis()
和/或doThat()
是同步还是异步。
如果它们是同步的,是的,onFinalCheck()
将等待直到完成。
如果它们是异步的,则onFinalCheck()
将等待直到完成doThis()
/ doThat()
调用,但该调用只会启动该过程。然后,该过程继续并异步完成。因此onFinalCheck()
将在该过程完成之前被调用。
如果要处理异步操作,请查看promises和新的(ES2018)async
functions。
例如,如果doThis()
/ doThat()
是异步的,并且它们返回一个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()
返回诺言,则:// I assume this is in an object initializer or `class`
checkSomething(array){
return (array ? doThis() : doThat())
.then(result => {
doFinalCheck();
return result;
});
}
请注意,
checkSomething
返回上面的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 - JavaScript条件执行流程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51366105/