亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
使用 Promise.all() 方法
所有 Promise 均成功解決
一個承諾被拒絕
await 關(guān)鍵字一起使用
使用 Promise.allSettled() 方法
最終想法
首頁 CMS教程 &#&按 JavaScript中使用Promise.all()和Promise.allSettled()方法

JavaScript中使用Promise.all()和Promise.allSettled()方法

Aug 30, 2023 pm 09:05 PM
javascript編程 promiseall() promiseallsettled()

JavaScript中使用Promise.all()和Promise.allSettled()方法

本教學(xué)將教您如何在 JavaScript 中使用 Promise 等待。

在本教程中,我將教您有關(guān) Promise.all()Promise.allSettled() 方法以及如何使用它們來處理多個 Promise。

使用 Promise.all() 方法

Promise 物件有三個有用的方法,名稱為then()catch()finally(),您可以使用它們在Promise 完成時執(zhí)行回調(diào)方法。 p>

Promise.all() 方法是一個靜態(tài)方法,這意味著它屬於整個類,而不是綁定到該類別的任何特定實(shí)例。它接受可迭代的 Promise 作為輸入並傳回單一 Promise 物件。

正如我之前提到的,Promise.all() 方法傳回一個新的 Promise。如果傳遞給該方法的所有承諾都已成功解析,則此新承諾將解析為已確定承諾值的陣列。一旦通過的承諾之一被拒絕,這個新的承諾也將被拒絕。

所有 Promise 均成功解決

以下是 Promise.all() 方法的範(fàn)例,其中所有 Promise 均已成功解析:

const promise_a = new Promise((resolve) => {
  setTimeout(() => {
    resolve('Loaded Textures');
  }, 3000);
});

const promise_b = new Promise((resolve) => {
    setTimeout(() => {
      resolve('Loaded Music');
    }, 2000);
});

const promise_c = new Promise((resolve) => {
    setTimeout(() => {
      resolve('Loaded Dialogues');
    }, 4000);
});


const promises = [
  promise_a, promise_b, promise_c
];

console.log('Hello, Promises!');

Promise.all(promises).then((values) => {
  console.log(values);
  console.log('Start the Game!');
});

/* Output

19:32:06 Hello, Promises!
19:32:10 Array(3) [ "Loaded Textures", "Loaded Music", "Loaded Dialogues" ]
19:32:10 Start the Game!

*/

我們在呼叫 Promise.all() 方法之前的語句記錄於 19:32:06。此外,我們的第三個 Promise 名為 promise_c 需要最長的時間才能解決,並在 4 秒後解決。這意味著呼叫 all() 方法傳回的 Promise 也應(yīng)該需要 4 秒鐘才能解析。我們可以透過將回呼函數(shù)傳遞給 then() 方法來驗(yàn)證是否需要 4 秒鐘才能解析。

這裡需要注意的另一件重要事情是,傳回的已完成值陣列包含這些值的順序與我們將 Promise 傳遞給 Promise.all() 方法的順序相同。名為 promise_b 的 Promise 解析速度最快,只需 2 秒。但是,其解析值仍然位於傳回數(shù)組中的第二個位置。這與我們將 Promise 傳遞給 Promise.all() 方法的位置相符。

這種秩序的維護(hù)在某些情況下非常有幫助。例如,假設(shè)您正在使用十個不同的 Promise 來獲取有關(guān)十個不同城市的天氣資訊。所有這些問題不會同時解決,而且不可能事先知道它們的解決順序。但是,如果您知道資料按照傳遞 Promise 的順序返回,您將能夠正確分配它以供以後操作。

一個承諾被拒絕

以下是其中一個承諾被拒絕的範(fàn)例:

const promise_a = new Promise((resolve) => {
  setTimeout(() => {
    resolve('Loaded Textures');
  }, 3000);
});

const promise_b = new Promise((resolve, reject) => {
    setTimeout(() => {
      reject(new Error('Could Not Load Music'));
    }, 2000);
});

const promise_c = new Promise((resolve) => {
    setTimeout(() => {
      resolve('Loaded Dialogues');
    }, 4000);
});


const promises = [
  promise_a, promise_b, promise_c
];

console.log('Hello, Promises!');

Promise.all(promises).catch((error) => {
  console.error(error.message);
  console.log('Stop the Game!');
});

/* Output

20:03:43 Hello, Promises!
20:03:45 Could Not Load Music
20:03:45 Stop the Game!

*/

同樣,我們在呼叫 all() 方法之前的語句記錄於 20:03:43。然而,我們的第二個承諾 promise_b 這次以拒絕告終。我們可以看到 promise_b 在 2 秒後被拒絕。這意味著 all() 方法傳回的 Promise 也應(yīng)該在 2 秒後拒絕,並出現(xiàn)與我們的 promise_b 相同的錯誤。從輸出中可以明顯看出,這正是發(fā)生的情況。

await 關(guān)鍵字一起使用

您可能已經(jīng)知道 await 關(guān)鍵字用於等待承諾解決,然後再繼續(xù)下一步。我們也知道 all() 方法傳回一個承諾。這意味著我們可以使用 await 以及對 Promise.all() 方法的呼叫。

唯一要記住的是,由於 await 僅在非同步函數(shù)和模組內(nèi)有效,因此我們必須將程式碼包裝在非同步函數(shù)內(nèi),如下所示:

function create_promise(data, duration) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(data);
    }, duration);
  });
}

const promise_a = create_promise("Loaded Textures", 3000);
const promise_b = create_promise("Loaded Music", 2000);
const promise_c = create_promise("Loaded Dialogue", 4000);

const my_promises = [promise_a, promise_b, promise_c];

async function result_from_promises(promises) {
  let loading_status = await Promise.all(promises);
  console.log(loading_status);
}

result_from_promises(my_promises);

/* Outputs

08:50:43 Hello, Promises!
08:50:47 Array(3) [ "Loaded Textures", "Loaded Music", "Loaded Dialogue" ]

*/

這次,我們定義了一個名為 create_promise() 的函數(shù),它根據(jù)提供的資料和持續(xù)時間為我們建立承諾。我們的非同步 result_from_promises() 函數(shù)使用 await 關(guān)鍵字來等待 Promise 解析。

使用 Promise.allSettled() 方法

當(dāng)您只想在所有承諾成功解決後繼續(xù)操作時,使用 Promise.all() 方法是有意義的。例如,當(dāng)您載入遊戲資源時,這可能很有用。

但是,假設(shè)您正在獲取有關(guān)不同城市天氣的資訊。在這種情況下,您可以輸出獲取資料成功的所有城市的天氣訊息,並輸出獲取資料失敗的錯誤訊息。

Promise.allSettled() 方法在這種情況下效果最好。此方法等待所有通過的承諾通過決議或拒絕來解決。此方法傳回的 Promise 包含一個物件數(shù)組,其中包含有關(guān)每個 Promise 結(jié)果的資訊。

function create_promise(city) {
  let random_number = Math.random();
  
  let duration = Math.floor(Math.random()*5)*1000;

  return new Promise((resolve, reject) => {
    if (random_number < 0.8) {
      setTimeout(() => {
        resolve(`Show weather in ${city}`);
      }, duration);
    } else {
      setTimeout(() => {
        reject(`Data unavailable for ${city}`);
      }, duration);
    }
  });
}

const promise_a = create_promise("Delhi");
const promise_b = create_promise("London");
const promise_c = create_promise("Sydney");

const my_promises = [create_promise("Delhi"), create_promise("London"), create_promise("Sydney"), create_promise("Rome"), create_promise("Las Vegas")];

async function result_from_promises(promises) {
  let loading_status = await Promise.allSettled(promises);
  console.log(loading_status);
}

result_from_promises(my_promises);

/* Outputs

[
  {
    "status": "fulfilled",
    "value": "Show weather in Delhi"
  },
  {
    "status": "fulfilled",
    "value": "Show weather in London"
  },
  {
    "status": "fulfilled",
    "value": "Show weather in Sydney"
  },
  {
    "status": "rejected",
    "reason": "Data unavailable for Rome"
  },
  {
    "status": "fulfilled",
    "value": "Show weather in Las Vegas"
  }
]

*/

如您所見,數(shù)組中的每個對象都包含一個 status 屬性,讓我們知道承諾是否已實(shí)現(xiàn)或被拒絕。在履行承諾的情況下,它包含 value 屬性中的解析值。在被拒絕的 Promise 的情況下,它在 reason 屬性中包含拒絕的原因。

最終想法

我們了解了 Promise 類的兩個有用方法,它們可以讓您同時處理多個 Promise。當(dāng)您想要在其中一個 Promise 被拒絕后立即停止等待其他 Promise 解決時, Promise.all() 方法很有用。當(dāng)您想要等待所有承諾解決時,無論其解決或拒絕狀態(tài)如何, Promise.allSettled() 方法非常有用。

以上是JavaScript中使用Promise.all()和Promise.allSettled()方法的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
jQuery引用方法詳解:快速上手指南 jQuery引用方法詳解:快速上手指南 Feb 27, 2024 pm 06:45 PM

jQuery引用方法詳解:快速上手指南jQuery是一個受歡迎的JavaScript庫,被廣泛用於網(wǎng)站開發(fā)中,它簡化了JavaScript編程,並為開發(fā)者提供了豐富的功能和特性。本文將詳細(xì)介紹jQuery的引用方法,並提供具體的程式碼範(fàn)例,幫助讀者快速上手。引入jQuery首先,我們需要在HTML檔案中引入jQuery函式庫??梢酝高^CDN連結(jié)的方式引入,也可以下載

解決閉包導(dǎo)致的記憶體洩漏問題 解決閉包導(dǎo)致的記憶體洩漏問題 Feb 18, 2024 pm 03:20 PM

標(biāo)題:閉包造成的記憶體洩漏及解決方法引言:閉包是JavaScript中一個非常常見的概念,它可以讓內(nèi)部函數(shù)存取外部函數(shù)的變數(shù)。然而,閉包在使用不當(dāng)?shù)那闆r下可能導(dǎo)致記憶體洩漏。本文將探討閉包所造成的記憶體洩漏問題,並提供解決方法及具體程式碼範(fàn)例。一、閉包引起的記憶體洩漏問題閉包的特性是內(nèi)部函數(shù)可以存取外部函數(shù)的變量,這意味著在閉包中引用的變數(shù)不會被垃圾回收。如果使用不當(dāng),

掌握J(rèn)avaScript中的影像處理與電腦視覺 掌握J(rèn)avaScript中的影像處理與電腦視覺 Nov 04, 2023 am 08:25 AM

掌握J(rèn)avaScript中的影像處理和電腦視覺,需要具體程式碼範(fàn)例隨著互聯(lián)網(wǎng)的普及和技術(shù)的進(jìn)步,影像處理和電腦視覺逐漸成為了許多開發(fā)者和研究人員感興趣的領(lǐng)域。而作為一種廣泛應(yīng)用的程式語言,JavaScript提供了許多強(qiáng)大的工具和函式庫,可以幫助我們實(shí)現(xiàn)影像處理和電腦視覺相關(guān)的任務(wù)。本文將介紹一些常用的JavaScript函式庫和具體的程式碼範(fàn)例,幫助讀者快速掌握

前端工程師職責(zé)解析:主要做什麼工作? 前端工程師職責(zé)解析:主要做什麼工作? Mar 25, 2024 pm 05:09 PM

前端工程師職責(zé)解析:主要做什麼工作?隨著互聯(lián)網(wǎng)的快速發(fā)展,前端工程師作為一個非常重要的職業(yè)角色,扮演著連接使用者與網(wǎng)站應(yīng)用程式的橋樑,起著至關(guān)重要的作用。那麼,前端工程師主要做些什麼工作呢?本文將對前端工程師的職責(zé)進(jìn)行解析,讓我們來一探究竟。一、前端工程師的基本職責(zé)網(wǎng)站開發(fā)與維護(hù):前端工程師負(fù)責(zé)網(wǎng)站的前端開發(fā)工作,包括編寫網(wǎng)站的HTML、CSS和JavaScr

掌握J(rèn)avaScript中的資料視覺化和報表生成 掌握J(rèn)avaScript中的資料視覺化和報表生成 Nov 04, 2023 pm 12:24 PM

掌握J(rèn)avaScript中的資料視覺化和報表生成,需要具體程式碼範(fàn)例現(xiàn)如今,資料視覺化和報表產(chǎn)生已經(jīng)成為了資訊時代中不可或缺的一部分。無論是企業(yè)決策分析、行銷推廣或科學(xué)研究,都需要將龐大而複雜的數(shù)據(jù)透過直覺的視覺化手段進(jìn)行展示和分析。而JavaScript作為一種廣泛應(yīng)用於web開發(fā)的程式語言,具備豐富的數(shù)據(jù)視覺化和報表生成庫,大大方便了開發(fā)人員對數(shù)據(jù)

JavaScript中使用Promise.all()和Promise.allSettled()方法 JavaScript中使用Promise.all()和Promise.allSettled()方法 Aug 30, 2023 pm 09:05 PM

本教學(xué)將教您如何在JavaScript中使用Promise等待。在本教程中,我將教您有關(guān)Promise.all()和Promise.allSettled()方法以及如何使用它們來處理多個Promise。使用Promise.all()方法Promise物件有三個有用的方法,名稱為then()、catch()和finally(),您可以使用它們在Promise完成時執(zhí)行回呼方法。 Promise.all()方法是一個靜態(tài)方法,這意味著它屬於整個類,而不是綁定到該類別的任何特定實(shí)例。它接受可迭代的Prom

jQuery引入必須的包是什麼? jQuery引入必須的包是什麼? Feb 23, 2024 pm 12:00 PM

jQuery是一個著名的JavaScript函式庫,它提供了簡潔而強(qiáng)大的功能,用來簡化JavaScript程式設(shè)計(jì)。當(dāng)將jQuery引入你的網(wǎng)頁專案時,你需要在HTML檔案中加入以下程式碼來引入必須的套件:我的網(wǎng)頁

實(shí)作動態(tài)新增元素到div的jQuery方法 實(shí)作動態(tài)新增元素到div的jQuery方法 Feb 24, 2024 pm 08:03 PM

jQuery是一個流行的JavaScript函式庫,用來簡化JavaScript程式設(shè)計(jì)。它提供了豐富的功能和方法,包括在HTML元素中動態(tài)新增元素的功能。本文將介紹如何使用jQuery來動態(tài)新增元素,同時提供具體的程式碼範(fàn)例。首先,我們需要在HTML文件中引入jQuery函式庫??梢酝高^以下方式引入:

See all articles