zjffun blog

JS Promise

更新于 写于 前端JavaScript

simple promise implement

Promise chaining cycle

js
const a = new Promise((res) => {
  setTimeout(() => res(a), 0);
});

a.then(a);

// Promise <rejected>: TypeError: Chaining cycle detected for promise #<Promise>

Those are not cycle.

js
const a = Promise.resolve();
const b = a.then(a);
const c = b.then(b);
c.then(b);

promise.then 的回调为什么要放到微任务队列?

个人理解:放到微任务应该是为了不阻塞交互,如果回调都同步执行遇到长回调链执行很长时间会导致页面一直无法交互。(手写过 Promise 应该可以发现,其实 promise.then 的回调可以在 fulfilledrejected 后同步执行。)