【发布时间】:2019-07-12 09:27:09
【问题描述】:
我无法理解为什么下面的代码会按顺序记录以下内容: “结尾” “超时完成” “承诺”
我假设“承诺”会在“超时完成”之前记录,因为它的优先级高于回调队列任务 (setTimeout)。 在此观察后我的假设是,在调用 .then 之前,promise 不会将其任务排入队列,因为它还没有准备好,因此允许 setTimeout 在回调队列中首先执行。这是正确的吗?
const sampleFunction = function(e) {
setTimeout(() => console.log('timeout done'), 0)
const data = fetch(`https://jsonplaceholder.typicode.com/comments/1`)
.then(response => {
return response.json();
})
.then(json => {
/*doSomething*/
console.log('promise')
});
console.log('end')
}
【问题讨论】:
-
一个已经解析的promise优先于回调队列,但是你的promise直到网络请求完成后才会解析。
标签: javascript asynchronous callback es6-promise ecmascript-2016