map中使用await 异步函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了map中使用await 异步函数相关的知识,希望对你有一定的参考价值。

参考技术A async onGetLocation(datas)
let res = await Promise.all(datas.map(async (item) =>
return await this.convertFrom( [item.lon, item.lat])
))
this.setState(
pathSimplifierData: res
)


convertFrom(point, type = 'gps')
return new Promise((resolve, reject) =>
window.AMap.convertFrom(point,type, (status,result) =>
if(result.info === 'ok')
resolve ( [result.locations[0].lng,result.locations[0].lat])

)
)

https://blog.csdn.net/playboyanta123/article/details/99686853

如何通过 foreach 函数避免在 dart Map 中使用 await 键

【中文标题】如何通过 foreach 函数避免在 dart Map 中使用 await 键【英文标题】:How to avoid using await key in dart Map by foreach function 【发布时间】:2019-02-15 23:41:49 【问题描述】:

所以,我有一张地图,它与使用里面的项目进行一些异步处理有关。我使用了 forEach 循环结构,并且在回调内部设计为异步,因为我在迭代主体中调用了 await

myMap.forEach((a, b)  await myAsyncFunc();  );
callFunc();

我需要在迭代所有项目后调用 callFunc()。但是 forEach 立即退出。救命!

【问题讨论】:

【参考方案1】:

在 Map.entries 上使用 for 循环而不是 forEach。如果您在异步函数中,则在 for 循环体中等待将暂停迭代。入口对象还允许您访问键和值。

Future<void> myFunction() async 
  for (var entry in myMap.entries) 
    await myAsyncFunction(entry.key, entry.value);
  
  callFunc();

【讨论】:

嗯,好吧,看起来它会工作,但我需要键和值,这就是我必须首先使用地图的原因。 已编辑 - 该条目为您提供键和值。如果你有这样的要求,那么在你的问题中给出它们会更容易,然后在 cmets 中给出 是的,我是 dart 和 Flutter 的新手,而且 myMap 实际上应该是代码中的 myMap.entries。谢谢,成功了。【参考方案2】:

您也可以将 Future.forEach 与这样的地图一起使用:

await Future.forEach(myMap.entries, (MapEntry entry) async 
  await myAsyncFunc();          
);
callFunc();

【讨论】:

这应该被接受,因为它使用 forEach 而不是 for 循环。谢谢乔丹!【参考方案3】:

你也可以使用map 喜欢:

const futures = myMap.map((a, b) => myAsyncFunc());
await Future.wait(futures);
callFunc();

【讨论】:

感谢您的回答。但是,我从所选答案中得到了我需要的东西。干杯! @VijayKumarKanta 不客气。请记住,结果略有不同。虽然我的答案会立即启动所有异步工作并在最后等待所有工作,但另一个答案会启动每个异步工作并在开始下一个工作之前等待它。 我认为您的解决方案更好一些,性能也更好。我认为应该改用它。但是我没有改变答案选择。非常感谢! 没问题。不是要求:)【参考方案4】:

用于从 HashMap 中提取 Maplist 的条目。

 products.entries.forEach((e) 
  var key = e.key;
  var values = e.value;
    double sum = 0;
    values.forEach((value) => sum += value[PlanogramShelf.SHELF_FULL]);
    target.add(OrdinalSales(
        key, double.parse((sum / valueslength).toStringAsFixed(2))));
  );

【讨论】:

以上是关于map中使用await 异步函数的主要内容,如果未能解决你的问题,请参考以下文章

在异步函数之外使用 await

如何在“react-dropzone”的“onDrop”中使用异步等待? (解析错误:不能在异步函数之外使用关键字'await')

使用 Await 读取异步对象集

await 表达式只能在异步函数中使用

使用 async/ await 进行 异步 编程

await 仅在异步函数中有效 - 使用 mongoosejs exec() 时