如何使用 promise() 记录修改后的作品

问题描述

const works = [
  { name: "CCS",workStatus: { isComplete: true } },{ name: "CCB",workStatus: { isComplete: false } },{ name: "CCF",];
works.forEach(function (item) {
  setTimeout(function(){
    if (item.name === "CCF") {
      item.workStatus.isComplete = true;
    }
  },3000);
});
console.log("works",works);

如果每个 forEach 循环执行至少需要 3 秒......

如何记录已被 forEach 循环修改的最终作品? (使用承诺

当前控制台只会记录旧作品,如何在此处记录修改过的作品?

解决方法

例如,您可以创建一个方法来修改您的项目并在完成后进行解析。然后使用 Promise.all() 等待所有修改完成。 Promise.all 解析后,打印出修改后的数组...

const works = [
  { name: "CCS",workStatus: { isComplete: true } },{ name: "CCB",workStatus: { isComplete: false } },{ name: "CCF",];

function m(item) {
  return new Promise(res => {
     setTimeout(() => {
       if (item.name === "CCF")
         item.workStatus.isComplete = true;
       res();
     },3000);
  });
}

Promise.all(works.map(x => m(x)))
  .then(_ => console.log(works));

但是由于所有item都使用同一种方法似乎不太合理,因为每个item可能有不同的修改,你可以事先检查一下,对需要修改的item调用修饰符即可>

const works = [
  { name: "CCS",];

function m(item) {
  return new Promise(res => {
     setTimeout(() => {
       item.workStatus.isComplete = true;
       res();
     },3000);
  });
}

let p = [];
works.forEach(x => {
  if (x.name === "CCF") p.push(m(x));
});

Promise.all(p)
  .then(_ => console.log(works));