随笔 - 114,  文章 - 0,  评论 - 0,  阅读 - 70318
     // await实现 
复制代码
    // 模拟其他语言中的 sleep,实际上可以是任何异步操作
    const sleep = (timeountMS) => new Promise((resolve) => {
      setTimeout(resolve, timeountMS);
    });

    (async () => {  // 声明即执行的 async 函数表达式
      for (var i = 0; i < 5; i++) {
        if (i > 0) {
          await sleep(1000);
        }
        console.log(new Date, i);
      }

      await sleep(1000);
      console.log(new Date, i);
    })();
复制代码

 

 
    // Promise 实现   注意:这里并没有完全按顺序依次执行输出,仅在等待前面循环输出完成后,输出最后一次
复制代码
    const tasks = []; // 这里存放异步操作的 Promise
    const output = (i) => new Promise((resolve) => {
      setTimeout(() => {
        console.log(new Date, i);
        resolve();
      }, 1000 * i);
    });

    // 生成全部的异步操作
    for (var i = 0; i < 5; i++) {
      tasks.push(output(i));
    }

    // 异步操作完成之后,输出最后的 i
    Promise.all(tasks).then(() => {
      setTimeout(() => {
        console.log(new Date, i);
      }, 1000);
    });
复制代码

 

// 此例为按顺序依次执行输出

复制代码
  var promiseList = Promise.resolve();                    // 新建一个立即执行的 Promise
    const output = (i) => {                               // 创建闭包,在循环中保留当前参数
      promiseList = promise.then(() => {                  // 按照循环为 PromiseList 赋值,创建一个所有循环中将要执行的函数体组成,then 连接的异步执行链
        return new Promise((resolve) => { 
          window.setTimeout(() => { 
            console.log(i) 
            resolve(); 
          }, 1000) 
        }) 
      }) 
    } 
    for (var i = 0; i < 5; i++) {                         // 循环创建执行链
      output(i); 
    }
复制代码

 

posted on   occc  阅读(700)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示