JS中的async/await的用法和理解

Posted liquanjiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS中的async/await的用法和理解相关的知识,希望对你有一定的参考价值。

1、首先需要理解async 和 await的基本含义

   async 是一个修饰符,async 定义的函数会默认的返回一个Promise对象resolve的值,因此对async函数可以直接进行then操作,返回的值即为then方法的传入函数

// 0. async基础用法测试

async function fun0() 
    console.log(1)
    return 1


fun0().then( x =>  console.log(x) )  //  输出结果 1, 1,


async function funa() 
    console.log(‘a‘)
    return ‘a‘


funa().then( x =>  console.log(x) )  //  输出结果a, a,


async function funo() 
    console.log()
    return 


funo().then( x =>  console.log(x) )   // 输出结果   

async function funp() 
    console.log(‘Promise‘)
    return new Promise(function(resolve, reject)
        resolve(‘Promise‘)
    )


funp().then( x =>  console.log(x) )   // 输出promise  promise

await 也是一个修饰符,

await 关键字 只能放在 async 函数内部, await关键字的作用 就是获取 Promise中返回的内容, 获取的是Promise函数中resolve或者reject的值
// 如果await 后面并不是一个Promise的返回值,则会按照同步程序返回值处理

//  await 关键字 只能放在 async 函数内部, await关键字的作用 就是获取 Promise中返回的内容, 获取的是Promise函数中resolve或者reject的值
// 如果await 后面并不是一个Promise的返回值,则会按照同步程序返回值处理,为undefined
const bbb = function() return ‘string‘

async function funAsy() 
   const a = await 1
   const b = await new Promise((resolve, reject)=>
        setTimeout(function()
           resolve(‘time‘)
        , 3000)
   )
   const c = await bbb()
   console.log(a, b, c)


funAsy()  //  运行结果是 3秒钟之后 ,输出 1, time , string,
// 2.如果不使用promise的方法的话

function log2(time) 
   setTimeout(function()
       console.log(time)
       return 1
    , time)


async function fun1() 
    const a = await log2(5000)
    const b = await log2(10000)
    const c = log2(2000)
    console.log(a)
    console.log(1)


fun1()

// 以上运行结果为: 立刻输出undefined   立刻输出1  2秒后输出2000  5秒后输出5000  10秒后输出10000

2、那么由此看来async / await的综合用法如下

// 1.定义一个或多个普通函数,函数必须返回Promise对象,如果返回其他类型的数据,将按照普通同步程序处理

function log(time) 
    return new Promise((resolve, reject)=> 
        setTimeout(function()
           console.log(time)
           resolve()
        , time)
    )


async function fun() 
    await log(5000)
    await log(10000)
    log(1000)
    console.log(1)


fun()
// 3. async / await的重要应用 

const asy = function(x, time) 
    return new Promise((resolve, reject) =>
        setTimeout(()=>
            resolve(x)
        , time)
    )


const add = async function() 
    const a = await asy(3, 5000)
    console.log(a)
    const b = await asy(4, 10000)
    console.log(b)
    const c =  await asy(5, 15000)
    console.log(a,b,c)
    const d = a + b +c  
    console.log(d)


add();

// 5秒后输出3  又10秒后输出4 又15秒后输出5  然后立刻输出3,4,5,然后输出12

 

以上是关于JS中的async/await的用法和理解的主要内容,如果未能解决你的问题,请参考以下文章

理解 Node JS 中的 async/await

理解异步函数async和await的用法

使用 babel js 将 async/await 编译为 es5

前端_js理解 JavaScript 的 async/await

Node.js 7 的 async await 终于来了,不过怎么觉得没啥用

Node.js回调地狱及使用Promiseasync和await函数的解决方法