zoukankan      html  css  js  c++  java
  • ES6参考---async函数(es7)

    ES6参考---async函数(es7)

    一、总结

    一句话总结:

    async函数 是ES2017的内容,也是解决异步问题的,也是同步流程表达异步操作,本质是Generator函数的语法糖
    async function foo(){
      await 异步操作;
      await 异步操作;
    }

    1、async函数 的本质?

    async函数的本质是Generator的语法糖

    2、async函数 的语法?

    function前面加上async,函数中的异步操作前面加上await,表示前面的异步操作做完了还会做下面的异步操作
    async function foo(){
      await 异步操作;
      await 异步操作;
    }

    3、async函数 的特点?

    a、不需要像Generator去调用next方法,遇到await等待,当前的异步操作完成就往下执行
    b、async取代Generator函数的星号*,await取代Generator的yield

    4、async函数 异步使用实例?

    在函数前面加了async标注异步,具体ajax调用函数前面加上了await:await sendXml(url)
        // 案例演示
        async function sendXml(url) {
          return new Promise((resolve, reject) => {
            $.ajax({
              url,
              type: 'GET',
              success: data =>  resolve(data),
              error: error => reject(error)
            })
          })
        }
    
        async function getNews(url) {
          let result = await sendXml(url);
          let result2 = await sendXml(url);
          console.log(result, result2);
        }
        getNews('http://localhost:3000/news?id=2')

    二、async函数(es7)

    博客对应课程的视频位置:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4   <meta charset="UTF-8">
     5   <title>async函数</title>
     6 </head>
     7 <body>
     8 
     9 <!--
    10   async函数(源自ES2017)
    11   概念: 真正意义上去解决异步回调的问题,同步流程表达异步操作
    12   本质: Generator的语法糖
    13   语法:
    14       async function foo(){
    15         await 异步操作;
    16         await 异步操作;
    17       }
    18   特点:
    19     1、不需要像Generator去调用next方法,遇到await等待,当前的异步操作完成就往下执行
    20     2、返回的总是Promise对象,可以用then方法进行下一步操作
    21     3、async取代Generator函数的星号*,await取代Generator的yield
    22     4、语意上更为明确,使用简单,经临床验证,暂时没有任何副作用
    23 
    24 -->
    25 <script type="text/javascript" src="./js/jquery-1.10.1.min.js"></script>
    26 <script type="text/javascript">
    27     async function timeout(ms) {
    28       return new Promise(resolve => {
    29         setTimeout(resolve, ms);
    30       })
    31     }
    32     
    33     async function asyncPrint(value, ms) {
    34       console.log('函数执行', new Date().toTimeString());
    35       await timeout(ms);
    36       console.log('延时时间', new Date().toTimeString());
    37       console.log(value);
    38     }
    39 
    40     console.log(asyncPrint('hello async', 2000));
    41     
    42     // await 
    43     async function awaitTest() {
    44       let result = await Promise.resolve('执行成功');
    45       console.log(result);
    46       let result2 = await Promise.reject('执行失败');
    47       console.log(result2);
    48       let result3 = await Promise.resolve('还想执行一次');// 执行不了
    49       console.log(result3);
    50     }
    51     awaitTest();
    52   
    53   
    54     // 案例演示
    55     async function sendXml(url) {
    56       return new Promise((resolve, reject) => {
    57         $.ajax({
    58           url,
    59           type: 'GET',
    60           success: data =>  resolve(data),
    61           error: error => reject(error)
    62         })
    63       })
    64     }
    65 
    66     async function getNews(url) {
    67       let result = await sendXml(url);
    68       let result2 = await sendXml(url);
    69       console.log(result, result2);
    70     }
    71     getNews('http://localhost:3000/news?id=2')
    72 
    73 </script>
    74 
    75 </body>
    76 </html>
     
  • 相关阅读:
    golang基础之第一个go程序
    golang基础之工程结构
    golang基础之初识
    Prometheus神器之监控K8s集群
    Kubernetes使用GlusterFS实现数据持久化
    Go使用Makefile构建
    快排的2种分区图解
    密钥交换之DH算法
    go mod使用
    socket常见选项之SO_REUSEADDR,SO_REUSEPORT
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12589306.html
Copyright © 2011-2022 走看看