[英]Array From Observable Returning Undefined
我尝试订阅一个可观察的返回数组,数组 object 很好地打印到控制台,但是访问数组的内容会引发未定义的错误,并且 array.length 打印出 0;
// 从数据存储中获取返回数组的 observable 生成
`getDataFromDatabase(sqlStatement:string, querydata?:any[]):Observable<any>{
let datas:Array<any> = [];
this.database.executeSql(sqlStatement, querydata?querydata:[]).then((data)=>{
let len = data.rows.length;
console.log('database data.rows', data.rows);
for(let i =0; i<len; i++){
let d= data.rows.item(i);
datas.push(d);
}
},
(err)=>{
datas = err;
}
);
return observable.forkJoin(observable.of(datas));
}`
// 订阅 observable 的 function
`checkIfFirstTime():Observable<number>{
this.database.getDatabaseState().subscribe(state=>{
if(state){
let query = "SELECT appLaunch AS al FROM User WHERE id = ?";
this.database.getDataFromDatabase(query, [1]).subscribe(data=>{
if(data!=null){
data = data[0];
console.log(data.length, ' - Check-auth.service 1...', data);
if(data[0].al){
let query2 = "SELECT pin AS pin FROM Setting WHERE id = ?";
console.log(query2);
this.database.getDataFromDatabase(query2, [200]).subscribe(data2=>{
data2 = data2[0];
if(data2[0].pin&&this.login){
this.authIndex = 1;
}
else if(data2[0].pin&&(!this.login)){
this.authIndex = 3;
}
else if(!data2[0].pin){
this.authIndex = 1;
}
});
}
else if(!data[0].al){
console.log('hey am here');
this.authIndex = 2;
}
}
});
}
});
return observer.of(this.authIndex);
}`
//错误结果
Array(1)0: {al: 0}length: 1__proto__: Array(0) "Check-auth.service 1..." Array(1)0: [{...}]length: 1__proto__: Array(0) " ....3" 1 vendor.js:55437 错误类型错误:无法读取 SafeSubscriber._next 处未定义的属性“al”(默认~home-home-module~pages-calendar-calendar-module~pages-pin-link- pin-link-module~pages-reminde~b3c38b73.js:9057) 在 SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub (vendor.js:94208) 在 SafeSubscriber.push。 ./node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next (vendor.js:94146) 在 Subscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._next (vendor.js :94089) 在 Subscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (vendor.js:94066) 在 ForkJoinSubscriber.push../node_modules/rxjs/_esm5/internal/observable/forkJoin .js.ForkJoinSubscriber.notifyComplete (vendor.js:95234) 在 InnerSubscriber.push../node_modules/rxjs/_esm5/internal/InnerSubscriber.js.InnerSub scriber._complete (vendor.js:93292) 在 InnerSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.complete (vendor.js:94078) 在 vendor.js:104694 在 subscribeToResult (vendor. js:104875) defaultErrorLogger @ vendor.js:55437 main.js:3124 数据库 data.rows 对象`
this.database.getDataFromDatabase(query, [1]).subscribe(data=>{
if(data!=null){
data = data[0];
您正在覆盖您获得的数据并且不再是一个数组,因此它无法在 pos[0] 处获得“al”。
尝试对变量使用不同且更具描述性的名称,以免混淆。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.