繁体   English   中英

来自 Observable 的数组返回未定义

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM