ES6知识点-Async函数和异步操作

4.4Async函数和异步操作

4.4.1基本概念

4.4.1.1异步

  • 简单说就是一个任务分成两段先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段
  • ES6诞生以前异步编程的方法,常见的有下面四种:
    • 回调函数
    • 事件监听
    • 发布/订阅
    • Promise 对象

4.4.2Generator函数实现协程

  • 协程也是异步编程的解决方案之一。
  • Generator函数是协程在ES6的实现,最大特点就是可以交出函数的执行权(即暂停执行)。
  • 异步操作需要暂停的地方都用yield语句注明
  • Generator函数不同于普通函数的另一个方面,即执行它不会返回结果,返回的是指针对象

4.4.3async函数

  • ES7提供了async函数

  • 语法 async function name(param) { statements }

    • name: 函数名称。
      param: 要传递给函数的参数名称。
      statements: 函数体。
  • 返回值

    • async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数

    • async函数内部return语句返回的值,会成为then方法回调函数的参数

      async function foo(){
          return "这是async函数的返回值";
        }
      console.log(foo())        //  Promise { '这是async函数的返回值' }
      
      foo().then((args)=>{        // 回调函数是箭头函数
         console.log(args);         // 这是async函数的返回值
      })

4.4.4await命令

  • await 操作符用于等待一个 Promise 对象,

  • 只能在异步函数 async function 内部使用

  • await 的返回值
    • 如果一个 Promise 被传递给一个 await 操作符,await 将等待 Promise 正常处理完成并返回其处理结果
    • 正常情况下,await命令后面是一个Promise对象。如果不是,会被转成一个已完成状态的Promise对象
    function testAwait (x) {
      return new Promise(resolve => {
        setTimeout(() => {
          resolve(x);
        }, 2000);
      });
    }
    async function foo() {
      var x = await testAwait ("hello world");
      console.log(x); 
    }
    foo ();         // hello world
    
    
    async function f() {
      return await 123;
    }
    f().then(v => console.log(v))
    // 123

    4.4.5async函数的错误处理

    • 防止出错的方法,把await命令放在try...catch代码块中。

      async function f() {
        try {
          await new Promise(function (resolve, reject) {
            throw new Error('出错了');
          });
        } catch(e) {
        }
        return await('hello world');
      }

猜你喜欢

转载自www.cnblogs.com/xuzhengguo/p/12088957.html
今日推荐