考虑以下角度代码
// 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中断?
排序的一般规则是什么,是否存在其他更复杂情况的例外,如嵌套承诺等?
答案 0 :(得分:2)
虽然javascript使用异步事件循环,但javascript代码执行是串行的,完全确定。您的代码将按以下顺序执行:
在步骤6之后,执行可能会发散。代码将等待其中一个http请求完成,然后解析该请求的承诺,随后在then
语句中运行该函数。 (2个请求无法同时解析,因为javascript是串行执行的,如前所述)
要直接回答您的问题,代码执行不能在javascript 中断。执行函数时,它会一直运行直到它返回。在此期间完成的任何异步操作只能在函数返回后运行。如上所述的多个可能事件以触发时的“先进先出”顺序执行。