首页 > 解决方案 > 基于异步代码循环遍历数组和更新变量

问题描述

我试图遍历一个数组并调用一个promise,并根据该结果更新变量。代码按我的意愿工作,但我担心这是否是编写它的好方法。有没有更好的方法?先感谢您。

/**
*
* u/returns Resolves a promise and returns value 'b'
*/
async function generatePromise() {
   return Promise.resolve('b');
}

async function main() {
   let showWarning = false;
   // List of users
   const users = ['a', 'b', 'c'];
   //Looping through users array and compare the result from promise and update showWarning boolean
   await users.reduce(async (promise, user) => {
     await promise;
     const result = await generatePromise();
     if (result === user) showWarning = true;
   }, Promise.resolve())

   console.log(showWarning)
}
main();

标签: javascriptarraystypescriptasync-await

解决方案


似乎不必要的复杂,逻辑有些倒退。假设它generatePromise总是返回相同的响应,你为什么要多次调用它?调用一次并检查该值是否包含在数组中:

const showWarning = users.includes(await generatePromise());

如果需要多次调用该函数(例如,因为它可能会为每个输入/用户返回不同的响应),那么您可以使用一个简单的for循环:

for (const user of users) {
  if (user === await generatePromise()) {
    showWarning = true;
    break; // why check other users if `showWarning` won't change anymore?
  }
}

推荐阅读