是否可以在继续之前等待内部的“ await”?

乏味的

我正在编写一个函数,该函数通过查询数据库以获取价格,然后将其乘以数量来计算总的$金额。它对数组中的每个项目执行此操作,然后将总数推送到一个数组中,然后将其减少为一个最终的总数,然后将其返回。功能如下图所示:

const calculateOrderAmount = async (items: cartProduct[]): Promise<number> => {
  const priceArray: number[] = [];
  items.forEach(async (p: cartProduct) => {
    const product = await Product.findById(p.prodId).exec();
    if (product) {
      const totalPrice = product.price * p.quantity;
      priceArray.push(totalPrice)
    } else return; 
  });
  let amount;
  if (priceArray.length === 0) amount = 0;
  else amount = priceArray.reduce((a, b) => a + b);
  return amount;
};

我遇到的问题是它的异步性。我希望它等待forEach结束,但是由于它是异步的,因此它将继续运行,并且该函数的其余部分先执行,因此最终返回0。是否有办法使其等待forEach完成?还是应该以其他方式重写它

亭子

通过使用forEach回调,您可以创建单独的一系列承诺,但是forEach调用本身不会等待这些承诺。

简单的解决方案是使用for循环,该循环不使用回调系统:

for (let p: cartProduct of items) {
    const product = await Product.findById(p.prodId).exec();
    if (!product) continue;
    const totalPrice = product.price * p.quantity;
    priceArray.push(totalPrice);
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Async/await 在继续之前不会等待数据库查询

来自分类Dev

Async Await 等待所有结果并继续

来自分类Dev

等待await vs Unwrap()

来自分类Dev

在setter内部使用await

来自分类Dev

httpclient async / await是否

来自分类Dev

在功能完成之前,无法使用“ await”使代码处于等待状态

来自分类Dev

JS 返回不等待 await

来自分类Dev

异步函数不等待 await

来自分类Dev

将ForEachAsync与Action内部使用await时不等待

来自分类Dev

for await在异步功能内部失败

来自分类Dev

异步函数:我可以在执行 await 之前返回吗?

来自分类Dev

是否可以在使用await的功能块中存在的for循环中使用await?

来自分类Dev

如何使用await / async等待资源

来自分类Dev

React – Async / Await 似乎没有等待

来自分类Dev

Nodejs - Await 不等待方法先执行

来自分类Dev

调用内部函数,但在继续之前等待响应

来自分类Dev

是否可以在MVC 4 AuthorizeAttribute中使用async / await?

来自分类Dev

使用Dart的async / await时是否可以级联方法?

来自分类Dev

是否可以在部分线路上使用await?

来自分类Dev

是否可以在MVC 4 AuthorizeAttribute中使用async / await?

来自分类Dev

AngularJs $ q promise是否与async / await兼容?

来自分类Dev

Async - Await 是否运行单独的线程?

来自分类Dev

是否在不使用async await关键字的情况下等待promise的价值?

来自分类Dev

是否使用 await Task.Run(() => 良好实践等待来自同步源的方法?

来自分类Dev

async/await 进程的可变结果:我们是否总是等待它?

来自分类Dev

在哪种情况下,异步方法将在与调用await之前使用的线程不同的线程中继续执行?

来自分类Dev

带有 await Promise.all() 的代码不会继续执行

来自分类Dev

WPF如何处理等待Async / Await响应的字段?

来自分类Dev

为什么将await *从异步/等待建议中删除?

Related 相关文章

  1. 1

    Async/await 在继续之前不会等待数据库查询

  2. 2

    Async Await 等待所有结果并继续

  3. 3

    等待await vs Unwrap()

  4. 4

    在setter内部使用await

  5. 5

    httpclient async / await是否

  6. 6

    在功能完成之前,无法使用“ await”使代码处于等待状态

  7. 7

    JS 返回不等待 await

  8. 8

    异步函数不等待 await

  9. 9

    将ForEachAsync与Action内部使用await时不等待

  10. 10

    for await在异步功能内部失败

  11. 11

    异步函数:我可以在执行 await 之前返回吗?

  12. 12

    是否可以在使用await的功能块中存在的for循环中使用await?

  13. 13

    如何使用await / async等待资源

  14. 14

    React – Async / Await 似乎没有等待

  15. 15

    Nodejs - Await 不等待方法先执行

  16. 16

    调用内部函数,但在继续之前等待响应

  17. 17

    是否可以在MVC 4 AuthorizeAttribute中使用async / await?

  18. 18

    使用Dart的async / await时是否可以级联方法?

  19. 19

    是否可以在部分线路上使用await?

  20. 20

    是否可以在MVC 4 AuthorizeAttribute中使用async / await?

  21. 21

    AngularJs $ q promise是否与async / await兼容?

  22. 22

    Async - Await 是否运行单独的线程?

  23. 23

    是否在不使用async await关键字的情况下等待promise的价值?

  24. 24

    是否使用 await Task.Run(() => 良好实践等待来自同步源的方法?

  25. 25

    async/await 进程的可变结果:我们是否总是等待它?

  26. 26

    在哪种情况下,异步方法将在与调用await之前使用的线程不同的线程中继续执行?

  27. 27

    带有 await Promise.all() 的代码不会继续执行

  28. 28

    WPF如何处理等待Async / Await响应的字段?

  29. 29

    为什么将await *从异步/等待建议中删除?

热门标签

归档