Angular 从可观测返回未定义的数组
我尝试订阅一个返回数组的可观察对象,数组对象可以很好地打印到控制台,但是访问数组的内容会产生未定义的错误和数组。长度打印输出0 //从数据存储中获取返回数组的可观察生成Angular 从可观测返回未定义的数组,angular,Angular,我尝试订阅一个返回数组的可观察对象,数组对象可以很好地打印到控制台,但是访问数组的内容会产生未定义的错误和数组。长度打印输出0 //从数据存储中获取返回数组的可观察生成 `getDataFromDatabase(sqlStatement:string, querydata?:any[]):Observable<any>{ let datas:Array<any> = []; this.database.executeSql(sqlStatement
`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));
}`
`getDataFromDatabase(sqlStatement:string,querydata?:any[]):可观察{
let data:Array=[];
this.database.executeSql(sqlStatement,querydata?querydata:[])。然后((数据)=>{
设len=data.rows.length;
log('database data.rows',data.rows);
for(设i=0;i{
数据=错误;
}
);
返回可观察的forkJoin(可观察的数据);
}`
//订阅可观察对象的函数
`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);
}`
`checkIfFirstTime():可观察{
this.database.getDatabaseState().subscribe(状态=>{
如果(州){
let query=“从用户中选择appLaunch AS al,其中id=?”;
this.database.getDataFromDatabase(查询[1]).subscribe(数据=>{
如果(数据!=null){
数据=数据[0];
log(data.length,'-Check-auth.service 1…',data);
if(数据[0].al){
让query2=“从设置中选择pin作为pin,其中id=?”;
控制台日志(查询2);
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;
}
如果(!data2[0].pin),则为else{
this.authIndex=1;
}
});
}
如果(!数据[0].al),则为else{
log('heyam here');
this.authIndex=2;
}
}
});
}
});
返回observer.of(this.authIndex);
}`
//误差结果
数组(1)0:{al:0}长度:1__proto__:Array(0)“Check-auth.service
1…”数组(1)0:[{…}]长度:1__-proto__:Array(0)“…3”1供应商。js:55437错误类型错误:无法读取的属性“al”
未定义
在SafeSubscriber上。_下一步(默认~主页模块~页面日历日历模块~页面pin链接pin链接模块~页面提醒~b3c38b73.js:9057)
在SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.\uu 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.\u下一步
(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完成
(卖方编号:93292)
在InnerSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.complete
(卖方编号:94078)
在vendor.js:104694
在subscribeToResult(vendor.js:104875)处,defaultErrorLogger@vendor.js:55437 main.js:3124 database data.rows对象`
您正在覆盖所获取的数据,该数据不再是数组,因此无法在位置[0]处获取“al”
尝试对变量使用不同且更具描述性的名称,以免混淆。forkjoin()函数创建另一个数组,使该数组成为2x2数组原始数据为数据[0][0]。因此我决定将数据传递给数据[0]再传递给数据;
this.database.getDataFromDatabase(query, [1]).subscribe(data=>{
if(data!=null){
data = data[0];