从可观察到的返回未定义的数组

时间:2019-09-26 08:08:32

标签: angular

我尝试订阅一个可观察到的返回数组,该数组对象可以很好地打印到控制台,但是访问该数组的内容会引发未定义的错误,并且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对象`

1 个答案:

答案 0 :(得分:1)

 this.database.getDataFromDatabase(query, [1]).subscribe(data=>{
                if(data!=null){
                    data = data[0];

您正在覆盖获得的数据,它不再是数组,因此无法在pos [0]处获取“ al”。

尝试对变量使用不同的更具描述性的名称,以免混淆。