我在网页编程方面遇到了困难。
我想使用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 [] |类型中不存在属性'length' ErrorObservable”。
'ErrorObservable'类型中不存在属性'length'。
还有第二个问题:
如何调用错误方法? (// Q2)
ret.mockError(new Error('Username or password is incorrect'));
答案 0 :(得分:3)
如果你没有在回调中提及数据类型,默认情况下你的编辑器会引用调用方法的返回类型。因此,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);
}
}