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

时间:2016-09-15 20:31:18

标签: javascript angularjs

考虑以下角度代码

// 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中断?

排序的一般规则是什么,是否存在其他更复杂情况的例外,如嵌套承诺等?

1 个答案:

答案 0 :(得分:2)

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

  1. something = 0
  2. something = 1
  3. $ http.get( 'SOME_URL')
  4. something = 3
  5. something = 4
  6. $ http.get( 'SOME_URL')
  7. 在步骤6之后,执行可能会发散。代码将等待其中一个http请求完成,然后解析该请求的承诺,随后在then语句中运行该函数。 (2个请求无法同时解析,因为javascript是串行执行的,如前所述)

    要直接回答您的问题,代码执行不能在javascript 中断。执行函数时,它会一直运行直到它返回。在此期间完成的任何异步操作只能在函数返回后运行。如上所述的多个可能事件以触发时的“先进先出”顺序执行。