如何在 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