【发布时间】:2021-03-09 23:40:48
【问题描述】:
在下面的代码 sn-p 中,setTimeout 和 reject 都异步执行。我的印象是 setTimeout 推送到偶数队列,然后拒绝推送到事件队列。然后 setTimeout 庆祝并立即执行,拒绝。这意味着首先记录 6 个,然后记录 3 个,但是控制台日志让我感到震惊:
3
6
这是为什么呢?为什么要在 setTimeout 之前拒绝?
let promise = new Promise(
function (resolve, reject) {
setTimeout(() => {
console.log(" 6 ");
}, 0);
reject(" 3 ");
resolve(" 4 ");
}
);
promise.then(
function (st) {
console.log(st);
},
function (st) {
console.log(st)
}
);
【问题讨论】:
-
setTimeout将始终“晚于”当前代码执行。所以,这里的操作是延迟一个函数(记录6)->用3拒绝->用4解决(但承诺已经被拒绝)->/*稍后*/->记录6 -
见youtube.com/watch?v=8aGhZQkoFbQ&ab_channel=JSConf 解释了js是如何工作的
-
作业队列的优先级高于任务队列
标签: javascript node.js asynchronous promise v8