声明: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
async function f1() { console.log(‘1‘); // return (‘1‘) } console.log(f1()) //Promise { undefined }
async function f1() { console.log(‘1‘); return (‘1‘) } console.log(f1()) //Promise { ‘1‘ }
async function f1() { console.log(‘1‘); return (‘1‘) } f1().then(function(x1) {console.log(‘x1=‘,x1)}) //x1=1
原文:https://www.cnblogs.com/liuyinlei/p/12408924.html