美文网首页
await async简单讲解

await async简单讲解

作者: yongningfu | 来源:发表于2017-03-21 22:24 被阅读0次

    es7的特性,平时用的不多,后面应该全面使用
    async: await的执行环境, 声明这个是一个异步调用的函数
    await: 后面一般跟一个promise(当然还有其他情况,不过一般不提倡), 当遇到await的时候,会使用协程的机制,函数暂时从断开,去执行其他的函数,当await后面的promise对象为确实状态的时候(即resolve rejected), 协程重新从断开的位置调用这个函数,await返回值是promise的对象携带的的数据
    下面是一个比较有意思的例子

    //一个延迟delay时间才 确实状态的promise
    //如果放在await后面的话,函数会断开delay时间,才重新回调这个函数,所以起到sleep的作用
    var sleep = (delay) => new Promise((resolve) => setTimeout(() => resolve('promise 数据'), delay));
    
    (async () => {
      for (var i = 0; i < 5; i++) {
        //函数从这里断开1s, 直到sleep变成 resolve状态的时候才重新调用
        let data = await sleep(1000);
        console.log(data); //promise 数据
        console.log(new Date, i);
      }
      await sleep();
      console.log(new Date, i);
    })();
    

    原文的代码不太友好

    var sleep = delay => new Promise(resolve => setTimeout(resolve, delay));
    (async () => {
      for (var i = 0; i <= 5; i++) {
        console.log(new Date, i);
        await sleep(1000);
      }
    })();
    

    还要十分注意的是 只要有一个await后面的promise是reject, 那么async就会中断,并且返回这个reject的promise

    相关文章

      网友评论

          本文标题:await async简单讲解

          本文链接:https://www.haomeiwen.com/subject/dtmpnttx.html