ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-12-23 23:01:45  阅读:259  来源: 互联网

标签:function 知识点 函数 ES6 await Promise Async 4.4 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');
      }

标签:function,知识点,函数,ES6,await,Promise,Async,4.4,async
来源: https://www.cnblogs.com/xuzhengguo/p/12088957.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有