Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 从可观测返回未定义的数组_Angular - Fatal编程技术网

Angular 从可观测返回未定义的数组

Angular 从可观测返回未定义的数组,angular,Angular,我尝试订阅一个返回数组的可观察对象,数组对象可以很好地打印到控制台,但是访问数组的内容会产生未定义的错误和数组。长度打印输出0 //从数据存储中获取返回数组的可观察生成 `getDataFromDatabase(sqlStatement:string, querydata?:any[]):Observable<any>{ let datas:Array<any> = []; this.database.executeSql(sqlStatement

我尝试订阅一个返回数组的可观察对象,数组对象可以很好地打印到控制台,但是访问数组的内容会产生未定义的错误和数组。长度打印输出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));
    }`
`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];