如果我的函数中有一个简单的条件(在下面的示例中),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/

10-09 21:47