Javascript 映射方法内部的异步可观察方法

Javascript 映射方法内部的异步可观察方法,javascript,observable,typescript2.0,Javascript,Observable,Typescript2.0,转换数组并调用内部几个可观察方法的最佳方法是什么 我正在寻找的是这种类型的工作: resultArray = someArray.map(item => { oneObs.subscribe(result1 => { item.result1 = result1 }); secondObs.subscribe(result2 => { item.result2 = result2

转换数组并调用内部几个可观察方法的最佳方法是什么

我正在寻找的是这种类型的工作:

   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);
  • 基于数组创建一个可观察的
  • 等待所有可观察对象完成并创建一个包含所有结果值的数组

  • 您试图混合使用同步和异步代码,这可能会导致一些奇怪的行为。我的建议是将数组转换为可观察的(使数组异步)以获得结果,然后将完成的结果再次转换为数组:

    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);
    
  • 基于数组创建一个可观察的
  • 等待所有可观察对象完成并创建一个包含所有结果值的数组