美文网首页
2017-11-28

2017-11-28

作者: 稚空 | 来源:发表于2017-11-29 00:38 被阅读0次

今天主要是学习了async和await,async对于现阶段处理异步来说是一种很好的方法了。

基本规则:

  • async表示一个async函数,await只能用在其函数里面;
  • await表示等待promise返回有结果了,然后才能继续向下执行;
  • await后面跟着的是一个promise对象。

基本用法

首先,必须是一个promise对象

var sleep = function (time) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      resolve('ok');
    }, time);
  })
};

var start = async function () {
  console.log('start');
  var result - await sleep(1000);
  console.log(result);
  console.log('end');
};

start();

最后返回的结果是:


1.png

如果sleep中返回的不是一个promise对象,则await后得到的结果是一个undefined

var sleep = function (time) {
  setTimeout(function () {
     console.log('ok');
   }, time);
};

var start = async function () {
  console.log('start');
  var result - await sleep(1000);
  console.log(result);
  console.log('end');
};

start();

得到的结果为:


2.png

关于其作用域

await只能在async的上下文中才能执行,否则会报错

var sleep = function (time) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      resolve('ok');
    }, time);
  })
};

var start = async function () {
  //[1, 2, 3, 4, 5, 6].forEach(function (index) {    // SyntaxError: Unexpected identifier
    //console.log(`${index}次`);
    //await sleep(1000);
  //});

  for (var i = 0; i < 10; i++) {
    console.log(`${i} 次`);
    await sleep(1000);
  }
}
start();

如果不是在同一个上下文中,那么await则会报错。

最后

这里有一个小技巧,就是如果要输出1~10,那么除了通过闭包的方式外,还有通过async的方式去获取。

// method 1
for (var i = 0; i < 10; i++) {
  (function (i) {
    setTimeout(function () {
      console.log(`${i} 次`);
    }, 1000);
  })(i);
}

// method 2
var sleep = function (time) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      resolve('ok');
    }, time);
  })
};

var start = async function () {
  for (var i = 0; i < 10; i++) {
    console.log(`${i} 次`);
    await sleep(0);
  }
}

start();

相关文章

  • iphonex 适配

    网页适配 iPhoneX,就是这么简单 (转载)2017-11-28 NONO JavaScript 前言 iPh...

  • 【Java并发学习】之原子类

    title: 【Java并发学习】之原子类date: 2017-11-28 22:02:15tags: [Java...

  • 2017-11-28

    2017-11-28 - 草稿 栾超 2017-11-27 19:59 · 字数 268 · 阅读 4 · 日记本...

  • 吃火锅

    吃火锅 王泊宁 2017-11-28 18:58 · 字数 461 · 阅读 0 · 日记本 今天早晨,我爸...

  • 蓝桔子1128

    《2017-11-28 蓝雁YS17015 【连续3天打卡】 A、今日完成情况 @信念三篇 3遍 完成100% @...

  • 连续第290天总结

    291976-陈国艳《2017-11-28》 [连续第290天总结] A目标完成情况。 听ppt课完成0% 亲子阅...

  • 2017-11-28

    《2017-11-28》 景学峰YS17024 【连续1天打卡】 A、今日完成情况 @信念三篇 3遍 完成100%...

  • 20171128

    《2017-11-28》 何帮民YS17014 【连续3天打卡】 A、今日完成情况 @信念三篇 3遍 完成100%...

  • 331-Day 3

    《2017-11-28》 尹汉斌 YS17038 【连续3天打卡】 A、今日完成情况 @信念三篇,读3遍 @绕口令...

  • 星巴克青岛实体店体验

    体验时间:2017-11-28 体验者:徐倩 影城名称:渭南万达影城 职位:营运主管 导语:星巴克(St...

网友评论

      本文标题:2017-11-28

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