最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中的await函數(shù)使用小結(jié)

 更新時間:2024年01月31日 10:24:27   作者:黃梅之俊雅  
async 函數(shù)是 AsyncFunction 構(gòu)造函數(shù)的實例,并且其中允許使用 await 關(guān)鍵字,async 和 await 關(guān)鍵字讓我們可以用一種更簡潔的方式寫出基于 Promise 的異步行為,而無需刻意地鏈?zhǔn)秸{(diào)用 promise,這篇文章主要介紹了JavaScript中的await,需要的朋友可以參考下

JavaScript中的await

先來介紹一下async 函數(shù)

async 函數(shù)是使用async關(guān)鍵字聲明的函數(shù)。async 函數(shù)是 AsyncFunction 構(gòu)造函數(shù)的實例,并且其中允許使用 await 關(guān)鍵字。async 和 await 關(guān)鍵字讓我們可以用一種更簡潔的方式寫出基于 Promise 的異步行為,而無需刻意地鏈?zhǔn)秸{(diào)用 promise。

function resolveAfter2Seconds() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('resolved');
    }, 2000);
  });
}
async function asyncCall() {
  console.log('calling');
  const result = await resolveAfter2Seconds();
  console.log(result);
  // Expected output: "resolved"
}
asyncCall();

async 函數(shù)可能包含 0 個或者多個 await 表達(dá)式。await 表達(dá)式會暫停整個 async 函數(shù)的執(zhí)行進(jìn)程并出讓其控制權(quán),只有當(dāng)其等待的基于 promise 的異步操作被兌現(xiàn)或被拒絕之后才會恢復(fù)進(jìn)程。promise 的解決值會被當(dāng)作該 await 表達(dá)式的返回值。使用 async/await 關(guān)鍵字就可以在異步代碼中使用普通的 try/catch 代碼塊。

注意: await關(guān)鍵字只在 async 函數(shù)內(nèi)有效。如果你在 async 函數(shù)體之外使用它,就會拋出語法錯誤 SyntaxError 。
備注: async/await的目的為了簡化使用基于 promise 的 API 時所需的語法。async/await 的行為就好像搭配使用了生成器和 promise。

await概念

await 操作符用于等待一個 Promise 兌現(xiàn)并獲取它兌現(xiàn)之后的值。它只能在異步函數(shù)或者模塊頂層中使用。

await expression;

expression為要等待的 Promise 實例,Thenable 對象,或任意類型的值。

返回值:返回從 Promise 實例或 thenable 對象取得的處理結(jié)果。如果等待的值不符合 thenable,則返回表達(dá)式本身的值

異常:拒絕(reject)的原因會被作為異常拋出。

await 通常用于拆開 promise 的包裝,使用方法是傳遞一個 Promise 作為 expression。使用 await 總會暫停當(dāng)前異步函數(shù)的執(zhí)行,在該 Promise 敲定(settled,指兌現(xiàn)或拒絕)后繼續(xù)執(zhí)行。函數(shù)的執(zhí)行恢復(fù)(resume)時,await 表達(dá)式的值已經(jīng)變成了 Promise 兌現(xiàn)的值。

若該 Promise 被拒絕(rejected),await 表達(dá)式會把拒絕的原因(reason)拋出。當(dāng)前函數(shù)(await 所在的函數(shù))會出現(xiàn)在拋出的錯誤的棧追蹤(stack trace),否則當(dāng)前函數(shù)就不會在棧追蹤出現(xiàn)。

await 總會同步地對表達(dá)式求值并處理,處理的行為與 Promise.resolve() 一致,不屬于原生 Promise 的值全都會被隱式地轉(zhuǎn)換為 Promise 實例后等待。處理的規(guī)則為,若表達(dá)式:

  • 是一個原生 Promise(原生Promise 的實例或其派生類的實例,且滿足 expression.constructor ===
  • Promise),會被直接用于等待,等待由原生代碼實現(xiàn),該對象的 then() 不會被調(diào)用。
  • 是 thenable 對象(包括非原生的 Promise 實例、polyfill、Proxy、派生類等),會構(gòu)造一個新 Promise用于等待,構(gòu)造時會調(diào)用該對象的 then() 方法。
  • 不是 thenable 對象,會被包裝進(jìn)一個已兌現(xiàn)的 Promise 用于等待,其結(jié)果就是表達(dá)式的值。

等待 Promise 的兌現(xiàn)

當(dāng)一個 Promise 被傳遞給 await 操作符,await 將等待該 Promise 兌現(xiàn),并在兌現(xiàn)后返回該 Promise 兌現(xiàn)的值。

function resolveAfter2Seconds(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}
async function f1() {
  let x = await resolveAfter2Seconds(10);
  console.log(x); // 10
}
f1();

轉(zhuǎn)換為 promise

若表達(dá)式的值不是 Promise,await 會把該值轉(zhuǎn)換為已兌現(xiàn)的 Promise,然后返回其結(jié)果。

async function f3() {
  const y = await 20;
  console.log(y); // 20
  const obj = {};
  console.log((await obj) === obj); // true
}
f3();

promise 被拒絕

如果 Promise 被拒絕,則拋出拒絕的原因。

async function f4() {
  try {
    const z = await Promise.reject(30);
  } catch (e) {
    console.error(e); // 30
  }
}
f4();

處理被拒絕的 promise

你可以鏈?zhǔn)秸{(diào)用 catch()(而不是使用 try)以在等待 promise 兌現(xiàn)之前處理被拒絕的 promise。

const response = await promisedFunction().catch((err) => {
  console.error(err);
  return "default response";
});
// response will be "default response" if the promise is rejected

到此這篇關(guān)于JavaScript中的await的文章就介紹到這了,更多相關(guān)JavaScript await內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js 無提示關(guān)閉瀏覽器頁面的代碼

    js 無提示關(guān)閉瀏覽器頁面的代碼

    js 無提示關(guān)閉瀏覽器頁面的代碼與函數(shù)需要的朋友可以參考下。
    2010-03-03
  • JavaScript禁止用戶多次提交的兩種方法

    JavaScript禁止用戶多次提交的兩種方法

    這篇文章主要介紹了JavaScript禁止用戶多次提交的兩種方法的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • JavaScript使用小插件實現(xiàn)倒計時的方法講解

    JavaScript使用小插件實現(xiàn)倒計時的方法講解

    今天小編就為大家分享一篇關(guān)于JavaScript使用小插件實現(xiàn)倒計時的方法講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • JS拉起或下載app的實現(xiàn)代碼

    JS拉起或下載app的實現(xiàn)代碼

    最近做項目遇到這樣的需求,通過手機網(wǎng)頁判斷是否安裝了自己公司app,如果安裝了則拉起app,沒有安裝則跳轉(zhuǎn)到下載頁。怎么實現(xiàn)呢?下面小編給大家分享js拉起或下載app的實現(xiàn)代碼,需要的朋友參考下
    2017-02-02
  • 用fabric.js搞定電子簽名拖拽合成圖片的完整步驟

    用fabric.js搞定電子簽名拖拽合成圖片的完整步驟

    fabric.js是一個強大的JavaScript HTML5 canvas庫,它讓開發(fā)者可以輕松操作畫布上的圖形、文本和圖像,支持縮放、旋轉(zhuǎn)、拖拽等交互功能,這篇文章主要介紹了用fabric.js搞定電子簽名拖拽合成圖片的相關(guān)資料,需要的朋友可以參考下
    2026-05-05
  • JavaScript Event學(xué)習(xí)第五章 高級事件注冊模型

    JavaScript Event學(xué)習(xí)第五章 高級事件注冊模型

    在這一章我會講解兩種高級時間注冊模型:W3C和微軟的。因為這兩個方法都不能跨瀏覽器,所以在現(xiàn)在看來他們的使用場合并不多。
    2010-02-02
  • 前端判斷頁簽是否為活躍狀態(tài)的常用方法

    前端判斷頁簽是否為活躍狀態(tài)的常用方法

    文章介紹了在網(wǎng)頁開發(fā)中判斷頁簽是否為活躍狀態(tài)的幾種方法,包括前端開發(fā)方法(通過CSS類名、事件監(jiān)聽、URLHash或路由)、React和Vue框架中的實現(xiàn)以及瀏覽器頁簽的活躍狀態(tài)判斷(使用PageVisibilityAPI),需要的朋友可以參考下
    2025-12-12
  • 小程序自定義彈出框效果

    小程序自定義彈出框效果

    這篇文章主要為大家詳細(xì)介紹了小程序自定義彈出框效果,支持淡入淡出動畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JavaScript實現(xiàn)私有屬性的幾種方式小結(jié)

    JavaScript實現(xiàn)私有屬性的幾種方式小結(jié)

    在JavaScript中,私有屬性是指只能在對象內(nèi)部訪問的屬性,外部無法直接訪問,JavaScript并沒有提供官方的私有屬性的支持,但可以通過一些技巧來模擬實現(xiàn)私有屬性,所以本文給大家總結(jié)了JavaScript實現(xiàn)私有屬性的幾種方式,需要的朋友可以參考下
    2024-04-04
  • javascript DOM設(shè)置樣式詳細(xì)說明和示例代碼

    javascript DOM設(shè)置樣式詳細(xì)說明和示例代碼

    JavaScript也可以用來修改DOM元素的樣式,我們可以使用style屬性來訪問和修改元素的樣式屬性,這篇文章主要給大家介紹了關(guān)于javascript DOM設(shè)置樣式詳細(xì)說明和示例代碼的相關(guān)資料,需要的朋友可以參考下
    2024-06-06

最新評論

岱山县| 武冈市| 阳春市| 吴堡县| 辰溪县| 上蔡县| 涞水县| 赤峰市| 梅州市| 雷州市| 上蔡县| 扎兰屯市| 竹溪县| 桓仁| 涞水县| 柳江县| 科技| 宝兴县| 新建县| 盘锦市| 盘锦市| 罗定市| 迁西县| 松阳县| 吴忠市| 涿州市| 丹棱县| 屏山县| 巴青县| 韩城市| 金坛市| 平阳县| 信丰县| 尼木县| 朔州市| 山东| 平南县| 云林县| 珠海市| 奉化市| 出国|