首页 > 其他 > 详细

aysn和await

时间:2020-03-04 14:24:44      阅读:64      评论:0      收藏:0      [点我收藏+]

声明:1.解决异步调用的写法和同步保持一致。

           2.async是声明获取异步调用结果的函数,而await是声明在async函数中获取异步调用的结果的语句。

           3.异步调用返回为promise,async执行完也会返回promise。

例1:

function A(guess){
    return new Promise((resolve, reject)=>{
        let sino = parseInt(Math.random() * 6 +1)
        if(sino > 3){
            if(guess === ‘大‘){
                resolve(sino)
            }else{
                reject(sino)
            }
        }else{
            if(guess === ‘大‘){
                reject(sino)
            }else{
                resolve(sino)
            }
        }

        setTimeout(()=>{
            resolve(‘hello‘)
        },3000)
    })
}
async function test(){
    try{
        //把await及获取它的值的操作放在try里
        let n =await A(‘大‘)
        console.log(‘赢了‘ + n)
    }catch(error){
      //失败的操作放在catch里
        console.log(‘输了‘ + error)
    }
}
test()
//输了1

 解析:await会等待异步调用的结果,获取到调用结果之后进行向下执行同步语句。正常返回时promise中的resolve(n), 异常返回为promise重的reject(n)。

           同时它只接受一次resolve和reject,promise中的第二次resolve或者reject不接受。

如果要获取多个异步调用的结果。使用Promise.all。

例子:

async function test(){
    try{
        //把await及获取它的值的操作放在try里
        let n =await Promise.all([A(‘大‘),A(‘大‘)])
        console.log(‘赢了‘ + n)
    }catch(error){
      //失败的操作放在catch里
        console.log(‘输了‘ + error)
    }
}
//赢了4,5 获取输了3
promise.all里面跟一个数组,数组的每一项是一个返回promise的函数调用,then的第一个参数是所有的promise都成功后调用,拿到所有promise的结果是一个数组;
第二个参数拿到的是第一个失败的值。
async执行完也会返回promise,而且promise中的resolve的值为async函数的返回值,没有返回即为undefined。
例子1:
async function f1() {
  console.log(‘1‘);
//   return (‘1‘)
}
console.log(f1()) //Promise { undefined }

 

例子2:
async function f1() {
  console.log(‘1‘);
  return (‘1‘)
}
console.log(f1()) //Promise { ‘1‘ }

 

例子3:
async function f1() {
  console.log(‘1‘);
  return (‘1‘)
}
f1().then(function(x1) {console.log(‘x1=‘,x1)}) //x1=1

 

 

aysn和await

原文:https://www.cnblogs.com/liuyinlei/p/12408924.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!