【问题标题】:Facing problem with return Observable<boolean> Angular面临返回 Observable<boolean> Angular 的问题
【发布时间】:2021-11-14 06:39:11
【问题描述】:

我遇到了角度问题。我创建了一个应该调用另一个管道的管道,并使用循环检查数组的所有元素是否为假。如果一个为真,则返回真。我不知道为什么不允许我返回 Observable 布尔值..
我整天都在为这个错误而苦苦挣扎。如果有人能帮助我,我将不胜感激 错误:

TS2322:类型“可观察”不可分配给类型 “可观察”。类型“void”不可分配给类型 '布尔'。

transform(antwortElem: UiKat[]): Observable<boolean> {
      if(!antwortElem){
         return null;
      }
      return this.service.enabledState$.pipe(
         map(enabledState => {
            let enabled = false;
            Elem.forEach((antwort) => {
               if(enabledState[antwort.id] != null){
                  return enabledState[antwort.id];
               }else{
                  return true;
               }
            })

         })
      )


   }

【问题讨论】:

  • 您不能从forEach 循环中“提前返回”。
  • 您的意思是 some 而不是 forEach 然后返回该值? return antwortElm.some(.... ?
  • 可能返回(null);会有帮助吗?
  • 我认为some 是您要查找的内容,if(enabledState[antwort.struktur.id] != null) 也是一个非常糟糕的检查,如果 enabledState[antwort.struktur.id] 未定义怎么办?它会返回 true。您应该使用 !! 运算符 (if (!!enabledState[antwort.struktur.id])) 或 (if (enabledState[antwort.struktur.id]))

标签: angular typescript pipe


【解决方案1】:
transform(antwortElem: UiKategorie[]): Observable<boolean> {
  if(!antwortElem){
     return null; // this probably isn't allowed for your typings. needs to be Observable<boolean> | null
  }
  return this.iqsService.enabledStateInbearbeitung$.pipe(
     map(enabledState => {
        // for each doesn't work that way, use the some operator instead
        // some will return true if any element matches the condition
        return antwortElem.some(antwort => !!enabledState[antwort.struktur.id])
     })
  )
}

【讨论】:

    【解决方案2】:

    map 需要返回一些东西。在你的情况下,你做了一个 forEach 应该返回

     for(let antwort in antwortElem) {
                   if(enabledState[antwort.struktur.id] != null){
                      return enabledState[antwort.struktur.id];
                   }else{
                      return true;
                   }
                })
    

    错误表明您什么也不返回,这就是为什么它是void

    【讨论】:

    • forEach 返回 undefined 仍然会导致“不可分配给类型”错误,因为 Observable&lt;undefined&gt; 与预期的返回类型 Observable&lt;boolean&gt; 不同
    • 你说得对!
    猜你喜欢
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 2021-09-24
    • 2018-07-14
    相关资源
    最近更新 更多