map 方法内部的异步 Observable 方法
Async Observable method inside of a map method
转换数组并在其中调用几个可观察方法的最佳方法是什么。
我要找的是这种类型的东西:
resultArray = someArray.map(item => {
oneObs.subscribe(result1 => {
item.result1 = result1
});
secondObs.subscribe(result2 => {
item.result2 = result2
});
});
最好的方法是什么?我想出了一个解决方法来使用这种 forEach 循环:
someArray.forEach(item => {
Observable.forkJoin([oneObs, secondObs]).subscribe(
(results: [Result1Type, Result2Type]) => {
item.result1 = results[0];
item.result2 = results[1];
resultArray.push(item);
});
});
感谢任何帮助。
您试图混合同步和异步代码,这可能会导致一些奇怪的行为。我的建议是将数组转换为可观察对象(使数组异步)获取结果,然后再次将完成的结果转换为数组:
Observable.from(someArray) // 1
.mergeMap(item => Observable.forkJoin(oneObs, twoObs)
.map(results => {
item.result1 = results[0];
item.result2 = results[1];
return item;
}))
.toArray() // 2
.subscribe(arr => resultArray = arr);
- 基于数组创建一个可观察对象
- 等待所有可观察对象完成并创建一个包含所有结果值的数组
转换数组并在其中调用几个可观察方法的最佳方法是什么。
我要找的是这种类型的东西:
resultArray = someArray.map(item => {
oneObs.subscribe(result1 => {
item.result1 = result1
});
secondObs.subscribe(result2 => {
item.result2 = result2
});
});
最好的方法是什么?我想出了一个解决方法来使用这种 forEach 循环:
someArray.forEach(item => {
Observable.forkJoin([oneObs, secondObs]).subscribe(
(results: [Result1Type, Result2Type]) => {
item.result1 = results[0];
item.result2 = results[1];
resultArray.push(item);
});
});
感谢任何帮助。
您试图混合同步和异步代码,这可能会导致一些奇怪的行为。我的建议是将数组转换为可观察对象(使数组异步)获取结果,然后再次将完成的结果转换为数组:
Observable.from(someArray) // 1
.mergeMap(item => Observable.forkJoin(oneObs, twoObs)
.map(results => {
item.result1 = results[0];
item.result2 = results[1];
return item;
}))
.toArray() // 2
.subscribe(arr => resultArray = arr);
- 基于数组创建一个可观察对象
- 等待所有可观察对象完成并创建一个包含所有结果值的数组