如何在 JavaScript 中按順序執行給定的 Promise 陣列?
在 JavaScript 中,有一個名為 "Promise.all" 的方法允許你並行執行 Promise 陣列。但是,有時你可能希望按順序執行你的 Promise。如果你想確保每個 Promise 一個接一個地執行,或者你需要在下一個 Promise 的執行中使用一個 Promise 的結果,這將非常有用。
在 JavaScript 中,有幾種不同的方法可以按順序執行 Promise 陣列。在本文中,我們將介紹其中的一些方法。
Promise.prototype.then()
按順序執行 Promise 陣列的一種方法是使用 then() 方法將它們連結在一起。此方法將一個函式作為輸入,該函式將在 Promise fulfilled 後執行。
示例
<html>
<head>
<title>Examples</title>
</head>
<body>
<div id="result1"></div>
<div id="result2"></div>
<div id="result3"></div>
<script>
Promise.resolve(1) .then(result => {
document.getElementById("result1").innerHTML = result
return Promise.resolve(2);
}) .then(result => {
document.getElementById("result2").innerHTML = result
return Promise.resolve(3);
}) .then(result => {
document.getElementById("result3").innerHTML = result
});
</script>
</body>
</html>如你所見,我們正在使用 **then()** 方法將三個 Promise 連結在一起。第一個 Promise 解析為值 1,該值將被顯示。第二個 Promise 解析為值 2,該值也將被顯示。最後,第三個 Promise 解析為值 3,該值也將被顯示。
因為 "then" 方法返回一個 Promise,所以我們可以以這種方式將 Promise 連結在一起以建立一個序列。
for-await-of
按順序執行 Promise 陣列的另一種方法是使用 "for-await-of" 迴圈。此迴圈允許你在 for 迴圈內使用 await 關鍵字。await 關鍵字會暫停程式碼的執行,直到 Promise fulfilled。
示例
以下是一個示例 -
<html>
<head>
<title>Example- for-await-of</title>
</head>
<body>
<script>
async function runPromisesInSeries() {
for await (const promise of [
Promise.resolve(1),
Promise.resolve(2),
Promise.resolve(3),
]) {
const result = await promise;
document.write(result);
document.write("<br>")
}
}
runPromisesInSeries();
</script>
</body>
</html>在此示例中,我們有一個包含 "for-await-of" 迴圈的非同步函式。此迴圈迭代 Promise 陣列。對於陣列中的每個 Promise,我們等待 Promise fulfilled。Promise fulfilled 後,將顯示其值。
使用庫
如果你需要比原生 Promise API 提供的功能更多的功能,可以使用 Bluebird 或 Q 等庫。這些庫提供了用於處理 Promise 的其他方法。
例如,Bluebird 提供了一個 "map" 方法,它允許你將值陣列對映到 Promise 陣列,然後等待所有 Promise fulfilled -
const Promise = require('bluebird');
Promise.map([1, 2, 3], x => {
return Promise.resolve(x * 2);
}).then(results => {
console.log(results); // [2, 4, 6]
});結論
在本文中,我們看到了在 JavaScript 中按順序執行 Promise 陣列的幾種不同方法。我們已經瞭解瞭如何使用 "then" 方法將 Promise 連結在一起,如何使用 "for-await-of" 迴圈,以及如何使用 Bluebird 或 Q 等庫。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP