zoukankan      html  css  js  c++  java
  • async/await

    todo

    参考:https://segmentfault.com/a/1190000013292562?utm_source=channel-newest

    一些关于async/await的见解(1):

    参考:https://segmentfault.com/a/1190000015488033

    1,async/await实际上是Generator的语法糖

    2,async/await一般与promise配合使用

    3,try...catch...

    4,小案例:

    function sayHi(name) {
      return new Promise((resolved, rejected) => {
        setTimeout(() => {
          resolved(name);
        }, 2000)
      })
    }
    
    async function sayHi_async(name) {
      const sayHi_1 = await sayHi(name)
      console.log(`你好, ${sayHi_1}`)
      const sayHi_2 = await sayHi('李四')
      console.log(`你好, ${sayHi_2}`)
      const sayHi_3 = await sayHi('王二麻子')
      console.log(`你好, ${sayHi_3}`)
    }
    
    sayHi_async('张三')
    // 你好, 张三
    // 你好, 李四
    // 你好, 王二麻子

    一些关于async/await的见解(2):

    1,async function定义异步函数,await不能单独使用

    2,await后面必须跟promise对象,会等promise对象执行完毕,并返回其返回值,但是会将后面的代码放入事件队列,如下

    async function f() {
        let promise = new Promise((resolve, reject) => {
            setTimeout(() => resolve('done!'), 1000)
        })
        let result = await promise // 直到promise返回一个resolve值(*)
        alert(result) // 'done!' 
    }
    f()

    3,async function返回值总是一个promise对象,如下:

    async function f() {
        return 1
    }
    f().then(alert) // 1

      也可以显式返回一个promise对象,如下:

    async function f() {
        return Promise.resolve(1)
    }
    f().then(alert) // 1

    4,await字面上使得JavaScript等待,直到promise处理完成,然后将结果继续下去。这并不会花费任何的cpu资源,因为引擎能够同时做其他工作:执行其他脚本,处理事件等等。

    其实这就是jobs(微任务队列的骚操作)

  • 相关阅读:
    python flask 环境安装
    pymongo的说明,挺详细的
    Mysql加锁过程详解
    MySQL Group Replication 介绍
    Linux 下方便的ssh非交互工具sshpass的安装与使用
    我要拿Offer之AQS条件队列及中断机制
    ThreadLocal解析
    AQS源码分析总结
    动手实现一个同步器(AQS)
    java线程池解析
  • 原文地址:https://www.cnblogs.com/wangtong111/p/11278227.html
Copyright © 2011-2022 走看看