有没有办法等待诺言才能继续?

我有一些数据,希望每个人都能获得一些信息。

我想在过程开始时记录控制台,并在过程完成时记录数据,但是结果为我提供了与初始化时相同的数据。

我已经尝试使用异步/等待,但是它没有按预期工作。

这是我的代码

const data = [
  {
    name: 'User 1',
    detail: 0
  },
  {
    name: 'User 2',
    detail: 0
  },
  {
    name: 'User 3',
    detail: 0
  }
];

function getDetail() {
  setTimeout(() =>  {
        return "Detail Test";
   }, 3000);
}

async function mapping() {
  await Promise.all(data.map(async (item) => {
    item.detail = await getDetail();
  }))
}


console.log("Start");
mapping();
console.log(data);

结果还是一样。

[
  {
    name: 'User 1',
    detail: 0
  },
  {
    name: 'User 2',
    detail: 0
  },
  {
    name: 'User 3',
    detail: 0
  }
]

我的期望

[
  {
    name: 'User 1',
    detail: "Detail Test"
  },
  {
    name: 'User 2',
    detail: "Detail Test"
  },
  {
    name: 'User 3',
    detail: "Detail Test"
  }
]
丹尼尔

您的代码存在3个问题:

  1. getDetail应该返回一个承诺,await让其实际等待。
const getDetail = () => new Promise((resolve) => {
  setTimeout(() =>  {
        resolve("Detail Test");
   }, 3000);
}
  1. Array.map 不会修改原始数组,强烈建议这样做,但是为了回答您的问题:
async function mapping() {
  await Promise.all(data.map(async (item, i) => {
    data[i].detail = await getDetail();
  }))
}
  1. 最后,您要等待映射使更改生效:
async function run() {
  console.log("Start");
  await mapping();
  console.log(data);
};

run();

这是一支工作

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法在JS中等待.forEach()

有没有办法在继续代码之前等待异步应用程序脚本函数调用?

有没有办法强制Chrome继续显示或隐藏“ https://”部分?

有没有办法使用systemctl状态中的参数来继续或中断代码?

有没有办法更改 Facebook 登录的(继续为...)表单?

有没有办法分离matplotlib图,以便继续计算?

Swift - 有没有办法触发程序断点在它停止后继续

有没有办法让jq在遇到错误后继续运行?

有没有办法在TextFSM的状态更改中继续同一行?

有没有办法在调用“zsh”后继续执行脚本?

有没有办法让程序在 Selenium Python 中遇到错误时继续运行

在 SQLite3 中,有没有办法在行限制后继续查询?

有没有办法让函数调用“继续”影响其调用者中的循环?

有没有办法等待在webflux代码中的异步方法结果

有没有办法在等待输入时保持程序运行?

有没有办法等待将来完成而不会阻塞Act Framework中的执行线程?

有没有办法等待另一个WebDriverIO承诺链完成?

有没有办法等待传奇的结果或例外?

有没有办法等待Angular中的DOM更新?

有没有办法编写响应onkeypress事件的异步等待代码?

有没有办法使用PyQt实施循环等待指标?

有没有办法从NodeJ中未等待的承诺中抛出错误?

有没有办法等待返回Result <T,E>而不是T?

有没有办法让sed不等待完整的行?

Python-有没有办法等待os.unlink()或os.remove()完成?

有没有办法让 Github 分支等待多个评论被批准以进行拉取请求?

在 PWA 中,有没有办法检查等待的 Service Worker 升级?

有没有办法在 R Shiny 中等待 Javascript 输入?

有没有办法匹配所有接口?