我尝试订阅一个可观察到的返回数组,该数组对象可以很好地打印到控制台,但是访问该数组的内容会引发未定义的错误,并且array.length打印出0;
//可观察到的生成从数据存储区获取返回数组
`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));
}`
//订阅可观察功能
`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}长度:1__proto__:Array(0)“检查验证服务 1 ...“ Array(1)0:[{…}]长度:1__proto__:Array(0)” .... 3“ 1 vendor.js:55437错误TypeError:无法读取属性'al'的 未定义 在SafeSubscriber._next(默认〜首页-家庭模块〜页面日历-日历日历模块〜页面销-链接-销-链接模块-页面提醒〜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.InnerSubscriber._complete (vendor.js:93292) 在InnerSubscriber.push ../ node_modules / rxjs / _esm5 / internal / Subscriber.js.Subscriber.complete (vendor.js:94078) 在vendor.js:104694 在subscriptionToResult(vendor.js:104875)处defaultErrorLogger @ vendor.js:55437 main.js:3124数据库data.rows对象`
答案 0 :(得分:1)
this.database.getDataFromDatabase(query, [1]).subscribe(data=>{
if(data!=null){
data = data[0];
您正在覆盖获得的数据,它不再是数组,因此无法在pos [0]处获取“ al”。
尝试对变量使用不同的更具描述性的名称,以免混淆。