Angular 方法不是来自 if 语句的 returns

Angular method not returns from if statement

此方法永远不会 returns 正确。尽管它在控制台中显示了该真实消息。为什么会出现这种行为?

 purgeEmptyRows(obj: any) :Observable<boolean>  {
          let isEmpty = false;
          Object.keys(obj).forEach(key => {
          if( obj[key] != null) {
            if(typeof obj[key] != "object"){
            console.log("true");
              return Observable.of(true);
            }
          }else {
            isEmpty = false;
          }

          })
          return Observable.of(isEmpty);
    }

    }

你正在 return 内部有 true 的 Observable。所以你有两个选择。

第一个选项,将函数更改为return一个简单的布尔值而不是 Observable。

第二个选项,订阅您正在 returning 的可观察对象。

对于第一个选项,执行以下操作:

purgeEmptyRows(obj: any) :boolean  {
    let isEmpty = false;
    Object.keys(obj).forEach(key => {
        if( obj[key] != null) {
            if(typeof obj[key] != "object"){
                console.log("true");
                isEmpty = true;
            }
        } else {
            isEmpty = false;
        }

    });
    return isEmpty;
}

对于第二个选项,您仍然需要将代码更改为以下内容:

purgeEmptyRows(obj: any) : Observable<boolean>  {
    let isEmpty = false;
    Object.keys(obj).forEach(key => {
        if( obj[key] != null) {
            if(typeof obj[key] != "object"){
                console.log("true");
                isEmpty = true;
            }
        } else {
            isEmpty = false;
        }

    });
    return Observable.of(isEmpty);
}

然后,当您调用该函数时,您将调用订阅结果。这是一个例子:

const obs = purgeEmptyRows(rows);
obs.subscribe(res => {
    console.log(res);
});

我想是你没有在里面赋值isEmpty

if(typeof obj[key] != "object"){
   console.log("true");
  return Observable.of(true);
}

它应该是这样的

if(typeof obj[key] != "object"){
  isEmpty = true
}