joken-前端工程师

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::
  404 随笔 :: 39 文章 :: 8 评论 :: 20万 阅读

代码

class myPromise {
  constructor(syncFn) {
    this.callbacks = [];
	//resolve 的目的是调用下一个then中的函数
    const resolve = (value) => {
      const nextThenFn = this.callbacks.shift();
      if (nextThenFn) {
        nextThenFn(value);
      }
    };
	//第一个resolve 由异步自己唤起
    syncFn(resolve);
  }
  //then的目的是把then中的回调函数记录到队列数组中
  then(callback) {
    return new myPromise((resolve) => {
      this.callbacks.push((value) => {
        const nextValue = callback(value);
        resolve(nextValue);
      });
    });
  }
}


使用

const pr = new myPromise((resolve) => {
  setTimeout(() => {
    resolve("resolved");
  }, 1000);
});

pr.then((value) => {
  console.log(value, "svndslkdlsfjlksdjlfksj");
  return "sldfslkjfd";
}).then((value) => {
  console.log(value, "sldflkjfd");
});
posted on   joken1310  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示