当前位置: 首页 > 知识库问答 >
问题:

异步等待promise.all地图不解决promise

洪胜涝
2023-03-14

我试着去理解promise。所有这些都在使用async Wait的映射函数中,但我似乎返回了挂起的promise,我不明白为什么

这是工作代码,当我有一个.然后解决我的promise

const arr = [1, 2, 3, 4, 5];

const results = Promise.all(arr.map( item => {
    return item + 1;
}));

results.then(result=> console.log(result))

哪个日志与预期一致=[2,3,4,5,6]

现在,为了实现使用async等待的功能,我知道我需要用关键字async包装异步函数中的函数,并等待promise.all

const results = async () => await Promise.all(arr.map(async (item) => {
    return item + 1;
}));


console.log(results())

但我似乎总是记录下我的promise{

共有3个答案

萧远
2023-03-14

与前面提到的其他答案一样,async返回一个promise。这就是你得到的原因

 Promise { <pending> } 

不管你所做的是否有意义,你都可以用它来兑现你的promise

js prettyprint-override">const results = async () =>
  await Promise.all(
    [1, 2, 3, 4, 5].map(async item => {
      return item + 1;
    })
  );

results().then(e => console.log(e));
邹玮
2023-03-14

您所做的是为结果分配一个异步函数,而不是等待异步函数的工作方式。您需要为结果指定一个promise,并避免然后回调链接,我们可以使用async/await获得响应。

js lang-js prettyprint-override">const arr = [1, 2, 3];
const results = Promise.all(arr.map(async (item) => {
    return item + 1;
}));

async function output () { 
  console.log(await results);
}

output();
曹华荣
2023-03-14

使用asnyc/wait不会使结果函数同步。(它字面上被标记为async!)因此,它返回一个promise,在记录值之前,您必须等待:

js prettyprint-override">const arr = [1, 2, 3];

const results = Promise.all(
  arr.map(async item => item + 1)
);

(async () => {
  console.log(await results)
})();
 类似资料:
  • 我一直试图理解C#中的Async/await和Task,但尽管看了youtube视频,阅读了文档,并参加了pluralsight课程,但一直失败得很厉害。 我希望有人能帮助回答这些稍微抽象的问题,帮助我的大脑摆脱困境。 1.为什么说async/await启用了一个“Asynchonrous”方法,而async关键字本身什么也不做,而await关键字添加了一个挂起点?添加挂起点不是强制方法同步操作,

  • 问题内容: 之间有什么区别: 还有这个 ? 我知道在第一个摘要中,所有的诺言都同时被兑现了,但是我不确定第二个。for循环是否等待第一次迭代完成以调用下一个promise?还是所有的诺言都在同一时间触发,循环的内部就像它们的回调一样? 问题答案: 是的,它们绝对不同。应该与异步迭代器一起使用,而不是与预先存在的promise数组一起使用。 为了清楚起见, 与…相同 要么 在等待任何事情之前,这些呼

  • 我正在尝试将数据库调用移出控制器,以清理并使其可测试。当它们在控制器中时,一切都会顺利进行。我将它们移出控制器,并添加了一个异步,以确保我们等待。否则,我将调用的中的函数。现在,一旦我使用async/await,控制器中的函数就会认为没有用户,因为它没有等待。 有几个关于异步等待的SO问题,但我没有找到一个解决我的问题。我确实验证了返回了我的用户,并添加了控制台日志来显示路径。 节点猫鼬异步等待似

  • 我试图在react/electron项目中使用async/await,但它不起作用。我想要的是获取docker容器状态列表。但是安慰。日志(列表)返回未定义的。 有人能帮我吗?:)

  • 我已经安装了babel-preset-es2017和babel-preset-env并更新了babelrc中的预置,但仍然给出了这个错误 是不是少了什么?

  • 我正试图将图像上传到firebase存储,但调用该函数时,未执行wait以获取url。我错过了什么? 看看这个其他主题,我发现问题可能是“然后”,但我如何设置代码以等待url? 异步/等待/然后飞镖/颤振 谢谢