Javascript 条件执行流程

标签 javascript

如果我的函数中有一个简单的条件(在下面的示例中),doFinalCheck() 是否总是最后执行?如果 doThis()doThat() 是 API 请求并且需要一些时间才能完成,那么 doFinalCheck() 是否会在API 请求?

checkSomething(array){
  if (array){
    doThis();
  }
  else {
    doThat();
  }
  doFinalCheck();
}  

最佳答案

...would doFinalCheck() always be executed last?

是的,除非doThis()/doThat()抛出异常。但请继续阅读。

If doThis() or doThat() are API requests and would take a bit of time to complete, would doFinalCheck() 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/

相关文章:

java - 在 JSP/GSP 中显示结果集

javascript - 超链接到部分将我带到下面的菜单栏

javascript - React.js 验证

javascript - 具有动态操作的 ASP.NET MVC RouteUrl

javascript - 如何获取PayPal捐赠的交易信息?

javascript - 在 AJAX 中的表单元格上添加带有参数的 @url.action

javascript - ui-router 解析在第一次加载时显示先前的解析结果,有时在重新加载时根本不显示

javascript - 在 HTML/JavaScript 中减去两个数字

javascript - Google Places API 请求出错

javascript - Angular 项目架构