async 与 await

async 函数:async function( function return Promise )

  ①函数的返回值是 promise 对象

  ② promise 对象的结果由 async函数执行的返回值决定

  

   

  async function fun(){
        return 1
    }

    const result=fun()
    console.log(result)
    result.then(
        value=>{
            console.log('onResolved:',value)
        },
        reason=>{
            console.log('onRejected:',reason)
        }
    )

    async function fun(){
        throw 2
    }

    const result=fun()
    console.log(result)
    result.then(
        value=>{
            console.log('onResolved:',value)
        },
        reason=>{
            console.log('onRejected:',reason)
        }
    )

    async function fun(){
        return Promise.resolve(3)
    }

    const result=fun()
    console.log(result)
    result.then(
        value=>{
            console.log('onResolved:',value)
        },
        reason=>{
            console.log('onRejected:',reason)
        }
    )

   async function fun(){
        return new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve(4)
            },1000)
        })
    }

    const result=fun()
    console.log(result)
    result.then(
        value=>{
            console.log('onResolved:',value)
        },
        reason=>{
            console.log('onRejected:',reason)
        }
    )

https: //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function

 

await expression ( value or promise )

  ①expression 一般是 promise 对象,也可以是其他值

  ②如果是 promise对象,await 返回的是 Promise 成功的值

  ③如果是其他值,直接将此值作为 await 的返回值

  ④await 必须写在 async 中,但 async 中可以没有 await

  ⑤如果 await 的 promise 失败,就会抛出异常,需要通过 try ... catch...捕获处理

  function fn1(){
        return new Promise((resolve,reject)=>{
            resolve(1)      
        })
    }
    function fn2(){
        return 2
    }
    function fn3(){
        return Promise.reject(3)
    }
    async function fn4(){
        const value1 = await fn1()
        const value2 = await fn2()
        console.log("value1:",value1)
        console.log('value2:',value2)
        try {
            const value3=await fn3()
        } catch (error) {
            console.log("error:",error)
        }
    }
    fn4()

    //value1:1
    //value2:2
    //error:3

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/await

 

async 与 await:

① async 用于声明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。

② async 是让方法变成异步,await 是等待异步方法执行完成,其实 await 等待的只是一个表达式,这个表达式在官方文档中说的是 Promise 对象,但是它也可以接受普通值。

③ 注意,await 必须在 async 方法中才可以使用,因为 await 访问本身就会造成程序停止阻塞,所以必须在异步方法中才可以调用。

④ async 会将其后的函数(函数表达式或Lambda)的返回值封装成一个 Promise 对象,而 await 会等待这个 Promise 完成,并将其 resolve 的结果返回出来。

function fn1(){
    return 'hello fn1'
}
async function fn2(){
    return 'hello fn2'
}

function fn3(){
    return new Promise((resolve,reject)=>{
        resolve("hello fn3")
    })
}

async function test(){
    const result1 = await fn1()
    const result2 = await fn2()
    const result3 = await fn3()
    console.log("result1:",result1)
    console.log("result2:",result2)
    console.log("result3:", result3)
}
test()

/** * result1: hello fn1 result2: hello fn2 result3: hello fn3 */

  

 

posted @ 2020-05-29 07:40  shanlu  阅读(613)  评论(0编辑  收藏  举报