Angular2 map -> 订阅数据类型错误(属性'length'在类型"错误可观察"上不存在。



我在网络编程方面有困难。

我想使用 HTTP 通信,调用"map"并传递数组数据。

makeTables(json:string) {
     let arr:Array<any> = [];
     ...
     return arr;
}
query(spName: string, objParam: Array<any>) {
     return this.http.post(this.url, this.data)
            .map(x => this.makeTables(x.json()));
};
login(username: string, password: string) {
      let ret = this.mysql.query("sp_admin_login", [username, password]);
            
      ret.subscribe( x => {
           // ERROR !!!!!!!!!
           console.log(x.length);
           if(1 ==1 /*user && user.token*/) {
                 localStorage.setItem("user", "user");
           } else {
           // Q2
                 // ret.mockError(new Error('Username or password is incorrect'));
           }
      });
        
         return ret;
    }

//错误!!!!!!!!

访问 x.length 时出现错误

错误消息是

/

admin/src/app/_authentication/authentication.service.ts (17,27(:

属性"长度"在类型"any[] |ErrorObservable'.
属性"长度"在类型"错误可观察"上不存在。

<小时 />

第二个问题:

如何调用错误方法?(//Q2 (

ret.mockError(new Error('Username or password is incorrect'));

如果你在回调中没有提到数据类型,默认情况下你的编辑器将引用调用方法的返回类型。因此query()方法可以返回Array<any>也可以抛出类型为 ErrorObservable 的错误。如果要检查成功回调的长度,则应特别提及类型。 ret.subscribe((x : Array<any>) => {});

login(username: string, password: string) {
      let ret = this.mysql.query("sp_admin_login", [username, password]);
      ret.subscribe((x : Array<any>) => {
           // x is a known array now
           console.log(x.length);

           if(1 ==1 /*user && user.token*/) {
                 localStorage.setItem("user", "user");
           } else {
           // Q2
               this.mockError(new Error('Username or password is incorrect'));
           }
      });
         return ret;
    }

谈到错误处理,假设你已经有一个错误方法。这不是角度错误,而是身份验证错误,因为您在登录不成功时调用它。不适合使用这样的方法来处理应用程序中的错误情况。但这仍然有助于处理角度误差。

mockError(error){
  if(error instanceof Error){
    // log error here
    console.log(error);
  }
}

相关内容

最新更新