可处理异步的循环函数

63 阅读1分钟

1、map (filter、reduce)

const arr = [12345];  
  
async function asyncFunction(num) {  
  return new Promise((resolve, reject) => {  
    setTimeout(() => {  
      resolve(num * 2);  
    }, 1000);  
  });  
}  
  
const promises = arr.map(async (num) => {  
  const result = await asyncFunction(num);  
  return result;  
});  
  
Promise.all(promises).then((results) => {  
  console.log(results); // [2, 4, 6, 8, 10]  
});

2、for循环(for...in、for...of)

const arr = [12345];  
  
async function asyncFunction(num) {  
  return new Promise((resolve, reject) => {  
    setTimeout(() => {  
      resolve(num * 2);  
    }, 1000);  
  });  
}  
  
async function processArray() {  
  const results = [];  
  for (let i = 0; i < arr.length; i++) {  
    const result = await asyncFunction(arr[i]);  
    results.push(result);  
  }  
  console.log(results); // [2, 4, 6, 8, 10]  
}  
  
processArray();
注意:avaScript中的forEach()方法是一个同步方法,它不支持处理异步函数。如果你在forEach中执行了异步函数,forEach()无法等待异步函数完成,它会继续执行下一项。这意味着如果在forEach()中使用异步函数,无法保证异步任务的执行顺序。