【问题标题】:Error in a Observable subscription using reduce operator使用 reduce 运算符的 Observable 订阅中的错误
【发布时间】:2021-10-21 01:26:18
【问题描述】:

我有以下可观察到的 rxjs:

export interface SubExperimentData {
    experimentId: number;
      name: string;
      subexperiment: {
        name: String
        avg: number;
        max: number;
      }[];
}

我现在想做的是获取特定实验的所有子实验。我使用以下代码从一个实验中获取所有子实验数据。

choosedExperiment 包含我想要获得的选定实验。

this.subexperimentData.pipe(map((extractedSResult) => {
        extractedSResult.reduce((extractedSResult) => { //Error
          if(extractedSResult.name == this.choosedExperiment) {
            extractedSResult.subexperiment.forEach((t) => {
              this.SubTaskAvg.push(t.avg)
              this.SubTaskName.push(t.name)
              }
            )
          }
        }
        )                                                                         
      }
      )).subscribe();
    });

错误:TS2345:类型“(extractedSResult:SubExperimentData)=> void”的参数不可分配给类型“(previousValue:SubExperimentData,currentValue:SubExperimentData,currentIndex:数字,数组:SubExperimentData [])=> SubExperimentData '。 类型“void”不可分配给类型“SubExperimentData”。

我不确定为什么会发生此错误。不幸的是,我不知道错误来自哪里。对于专业人士来说可能很清楚,但作为新手我不明白。代码的基础来自我已经解决的另一个问题。可惜我只看懂代码90% 为什么我不知道问题的解决方法。谢谢!

【问题讨论】:

    标签: angular rxjs observable


    【解决方案1】:

    不清楚你想要完成什么

    extractedSResult 的类型是什么?你有extractedSResult.reduce 的事实让我相信它是一个可迭代的(也许是某种数组?)如果是这样,也许将变量复数,使其成为extractedSResults。您在传递给 reduce 的 lambda 中隐藏相同的变量名称。那里的extractedSResult 是什么类型的?看起来可能SubExperimentData 是类型。

    在 reduce 中,你正在对一些全局变量做一些事情。看起来您正在某种类型的两种数据结构(堆栈或数组等)中累积值。但你没有返回任何东西。也就是说这个函数的返回类型是void

    你的错误是什么意思

    错误告诉您,您传递给 reduce 的 lambda 是错误的。查看reduce的工作原理,它需要一个lamda,其中第一个值是累积值,第二个值是当前迭代的值(通常您也需要累积值的种子值)。

    最后,reduce 还期望有一个返回类型。特别是需要返回新的累积数据。

    您的 lambda 不满足任何这些条件。

    寻求解决方案

    很难确定您在这里尝试做什么。如果您所追求的只是副作用,您可以将代码直接扔到subscribe 的回调中。你也想要forEach而不是reduce

    this.subexperimentData.subscribe(extractedSResults => {
      extractedSResults.forEach(extractedSResult => {
        if(extractedSResult.name == this.choosedExperiment) {
          extractedSResult.subexperiment.forEach(t => {
            this.SubTaskAvg.push(t.avg)
            this.SubTaskName.push(t.name)
          })
        }
      })    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 2017-11-25
      • 2014-09-20
      • 2017-08-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多