微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何使用 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));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。