sl1673495 / blogs

:book: 全网 100w+ 阅读量的进阶前端技术博客仓库,Vue 源码解析,React 深度实践,TypeScript 进阶艺术,工程化,性能优化实践……
https://ssh-blog.vercel.app
Other
3k stars 248 forks source link

这个写法有问题,cd之间不会相隔1s执行 #82

Closed xiaodongxing closed 3 years ago

xiaodongxing commented 3 years ago
/*** async solution ***/

const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

// *** realize part
const log = console.log;
Promise.prototype.run = Promise.prototype.then;
// ***

const subFlow = createFlow([() => delay(1000).then(() => log("c"))]);

createFlow([
  () => log("a"),
  () => log("b"),
  subFlow,
  [() => delay(1000).then(() => log("d")), () => log("e")],
]).run(() => {
  console.log("done");
});

// *** realize part
async function createFlow() {
  const jobs = [...arguments].flat(Infinity);
  for (let i = 0; i < jobs.length; i++) {
    typeof jobs[i] === "function" ? await jobs[i]() : await jobs[i];
  }
}
// ***

Originally posted by @anson09 in https://github.com/sl1673495/blogs/issues/55#issuecomment-839410532