在JavaScript中解释Promise.race()与async-await

在JavaScript中解释Promise.race()与async-await

我们将在本教程中学习Promise.race()方法。正如race()方法的名字所示,作为race()方法的参数传递的承诺会做比赛执行。

因此,无论哪个承诺先被解决,都将只由race()方法执行,而其他承诺将永远不会被执行。

Promise.race()

JavaScript中的Promise.race方法允许你等待一组承诺中的第一个被履行或拒绝,并处理发生的结果或错误。只要有一个输入的承诺被履行或拒绝,它就会返回一个被履行或拒绝的承诺,以及该承诺的值或原因。

用户可以按照下面的语法,使用promise.race()方法来执行第一个已解决的承诺。

Promise.race(iterable).then((response) => {
   // handle response
});

在上面的语法中,Promise.race()方法将iterable作为第一个参数,我们可以在’then’块中处理成功执行的承诺的响应。

这里iterable采取可迭代的对象,比如一个承诺数组,以执行其中的任何承诺,哪个先结算。

语法

下面是你如何在JavaScript中使用Promise.race方法和async-await的语法。

async function example() {
   try {
      const result = await Promise.race([promise1, promise2, ...]);
   } catch (error) {
      // handle error
   }
}

这里,promise1promise2 ,等等是你要等待的承诺。Promise.race方法返回一个被解决或被拒绝的承诺,该承诺带有第一个被解决或被拒绝的输入承诺的值或原因。

异步函数的例子使用try/catch语句来处理错误情况,如果任何输入承诺被拒绝,catch块将被执行。

示例 1

在这个例子中,我们创建了多个承诺,并在承诺中设置了定时器来解决或拒绝这些承诺。我们把承诺的数组作为race()方法的参数传递给它。

输出显示,race()方法执行了被拒绝的承诺,因为它没有定时器。所以,race()方法执行的是第一个承诺,它被提前履行了,即使被拒绝或解决。

<html>
<body>
   <h2>Using the Promise.race() </i> Method </h2>
   <div id="output"></div>
   <script>
      let promise_1 = new Promise((res, rej) => {
         setTimeout(() => {
            res("Resolved promise with time of 0 milliseconds");
         }, 1000);
      });
      let promise_2 = new Promise((res, rej) =>
      rej("This promise is rejected!")
      );
      let promise_3 = new Promise((res, rej) => {
         setTimeout(() => {
            res("Resolved promise with time of 2000 milliseconds");
         }, 2000);
      });
      Promise.race([promise_1, promise_2, promise_3]).then(
         (response) => {
            document.getElementById("output").innerHTML +=
            "Promise resolved successfully.";
         },
         (error) => {
            document.getElementById("output").innerHTML += "Promise rejected";
         }
      );
   </script>
</body>
</html>

示例 2

在这个例子中,我们采用了不同的API,并使用fetch方法做了一个承诺。我们有一个名为request的许诺数组。

我们使用race()方法来解决所有的请求,无论哪个承诺将首先解决,我们都在’then’块内打印出URL。

<html>
<body>
   <h2>Using Promise.race() Method with async-await</h2>
   <div id = "output"> </div>
   <button onclick = "executeRace()"> Fetch data from early promise </button>
   <script>
      async function executeRace() {
         // array of different promises
         const requests = [
            fetch("https://api.publicapis.org/entries"),
            fetch("https://catfact.ninja/fact"),
            fetch("https://api.coindesk.com/v1/bpi/currentprice.json"),
         ];
         // resolving the promises using the race() method
         const res = await Promise.race(requests);
         document.getElementById("output").innerHTML +=
         "The first promise resolve is " + res.url;
      }
   </script>
</body>
</html>

当用户需要使用第一个已解决的承诺的响应时,可以使用race()方法,即使是被拒绝或被解决。如果用户需要使用第一个成功解决的承诺的结果,他们应该使用 promise.any()方法。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

JavaScript 教程