亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

ES6 async 函數

標簽:
JavaScript

是什么

async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。

  • 不同之处

  1. async函数的执行,与普通函数一模一样,只要一行。不像 Generator 函数,需要调用next方法。

  2. async函数的返回值是 Promise 对象,Generator 函数的返回值是 Iterator 对象。

  3. 语义性更好,async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。

使用

async函数内部return语句返回的值,会成为then方法回调函数的参数。

async function f() {  return 'hello world';
}

f().then(v => console.log(v))   //hello world

async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到。

async function f() {  throw new Error('出错了');
}

f().then(  v => console.log(v),
  e => console.log(e)      // Error: 出错了)

只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数。
await命令后面是一个 Promise 对象。如果不是,会被转成一个立即resolve的 Promise 对象。
只要一个await语句后面的 Promise 变为reject,那么整个async函数都会中断执行。为了代码还能继续执行,我们可以将await命令放在try...catch代码块中。

async function f() {  await Promise.reject('出错了');  await Promise.resolve('hello world'); // 不会执行}

f().then(  v => console.log(v),
  e => console.log(e)          //出错了)async function f() {  try {    await Promise.reject('出错了');
  } catch(e) {    console.log(e)     //出错了
  }  return await Promise.resolve('hello world');
}

f().then(  v => console.log(v),       //hello world
  e => console.log(e)       
)

注意点

  • 最好把await命令放在try...catch代码块中。

  • await命令只能用在async函数之中,如果用在普通函数,就会报错。

  • 多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。



作者:tiancai啊呆
链接:https://www.jianshu.com/p/ea4a6d5308dd


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消