繁体   English   中英

javascript异步的执行顺序是什么?

[英]What is the execution sequence of javascript async?

考虑以下角度代码

// 1.
var something = 0;
// 2.
something = 1;

$http.get('some_url')
  .then(function() {
  // 3.
    something = 2;
  })
  .catch(function(){})

// 4.
something = 3

// 5.
something = 4

// 6.
$http.get('some_url')

假设在语句4$http解析

语句5是下一步执行还是语句3是下一步执行?

如果语句5开始执行,是否意味着它将继续执行后续语句,直到不使用该线程为止?

如果下一条语句3开始执行,是否意味着该线程总是被使用调用顺序时间的promise解析所打断?

排序的一般规则是什么?对于其他更复杂的情况(如嵌套的Promise等)是否有例外?

尽管javascript使用异步事件循环,但是javascript代码的执行是串行的,并且完全是确定性的。 您的代码将按以下顺序执行:

  1. = 0
  2. = 1
  3. $ http.get('some_url')
  4. 某物= 3
  5. 某物= 4
  6. $ http.get('some_url')

在步骤6之后,执行可以分开。 该代码将等待,直到http请求之一完成,然后解析该请求的promise,随后在您的then语句中运行该函数。 (如前所述,由于javascript是串行执行的,因此无法同时解决2个请求)

为了直接回答您的问题, 无法在javascript中中断代码执行 执行函数时,它将一直运行直到返回。 在此期间完成的所有异步操作都只能在函数返回后才能运行。 多个可能发生的事件,如被触发时,将按照“先进先出”的顺序执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM