异步调用完成后如何访问Set

本杰明·阿普里尔

使用此代码,我可以正确地添加到“ MaterialCollectionSet”中

let MaterialCollectionSet: Set<string> = new Set();

for(let data of SDE_REACTIONDATA) {

  this.ESI.ReturnsType_AtId(data.materialTypeID).subscribe((MaterialData) => {

    MaterialCollectionSet.add(MaterialData.name);

});

但是,尝试运行代码

let MaterialCollectionSet: Set<string> = new Set();

for(let data of SDE_REACTIONDATA) {

  this.ESI.ReturnsType_AtId(data.materialTypeID).subscribe((MaterialData) => {

      MaterialCollectionSet.add(MaterialData.name);

}); 

console.log(MaterialCollectionSet);

将记录一个空的Set。

我了解这是由于console.log在for-of循环之外被调用之后发生的异步调用

我的问题是,在for-of循环完成填充后如何实际使用Set?

越野车

我们可以forkJoin用来等待所有请求

const requests$ = SDE_REACTIONDATA.map(data => this.ESI.ReturnsType_AtId(data.materialTypeID));

let MaterialCollectionSet: Set<string> = new Set();

forkJoin(requests$).subscribe(responses => {
  // Now you can access the `responses`;
  MaterialCollectionSet.add(responses.map(MaterialData => MaterialData.name));
})

或如@JB Nizet建议的那样:

const requests$ = SDE_REACTIONDATA.map(data => this.ESI.ReturnsType_AtId(data.materialTypeID));

let MaterialCollectionSet: Set<string> = new Set();

merge(requests$).subscribe(
  MaterialData => MaterialCollectionSet.add(MaterialData.name),
  null, // error handler
  () => console.log(MaterialCollectionSet) // complete
)

严格的解决方案取决于您需要什么。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

循环中的所有异步调用完成后,如何调用函数?

jQuery-仅在异步调用完成后显示div

等待多个异步调用完成后再继续

如何进行多个异步调用,然后在所有调用完成后执行一个函数?

Qt异步调用:如何在异步调用完成其工作后运行某些内容

渲染方法后componentWillMount中的异步调用完成

如何异步调用方法并等待API调用完成

等待多个异步调用完成?

仅当来自服务的异步调用完成时,如何调用函数?

异步http.get调用完成后加载html模板

如何等待所有异步调用完成

目标C-如何等待异步调用完成

提交表单之前,请等待异步调用完成

在React渲染之前等待多个异步调用完成

SwiftUI中异步请求完成后如何调用函数?

如何仅在异步方法完成后调用方法

即使在函数调用完成后,也可以访问堆栈上的内存位置

从listadapter调用完成后,活动未完成

链接HREF调用完成后的jQuery调用函数

Ajax调用完成后的调用功能

在所有Firebase调用完成后,如何重新加载数据?

ajax调用完成后,如何在.scroll()事件中运行函数?

HTTP调用完成后,如何隐藏加载微调器?

jQuery:如何在ajax调用完成后回调每个循环?

调用完成后,Android App崩溃

所有ajax调用完成后的事件

内部$ http调用完成后执行函数-AngularJS

p:blockUI在Ajax调用完成后仍然被阻止

Twilio PHP - 调用完成后运行 AJAX 脚本