angular - 来自 Observable 的数组返回未定义
问题描述
我尝试订阅一个返回数组的可观察对象,数组对象打印到控制台很好,但是访问数组的内容会引发未定义的错误,并且 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 的函数
`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.InnerSubscriber._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 对象`/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.complete (vendor.js:94078) at vendor.js:104694 at subscribeToResult (vendor.js:104875) defaultErrorLogger @ vendor.js:55437 main.js:3124数据库 data.rows 对象`/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.complete (vendor.js:94078) at vendor.js:104694 at 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”。
尝试对变量使用不同且更具描述性的名称,以免混淆。
推荐阅读
- angular - 如何给一个ngrx减速器/动作一个值来设置状态?
- flutter - Cocoapods 兼容性错误 - 运行 pod install 时出错
- excel - 如何复制一定数量的值,然后在 Excel 中更改为另一个
- ios - 如何在 react-native-webview 中使用 blob url 下载 pdf
- python-telegram-bot - Python Telegram Bot - 如何将 JSON response.content 作为 PDF 文件发送
- c# - 如何通过@Html.TextBoxFor 搜索产品,这个(@Html.TextBoxFor)在表格的一行中
- python - Python:无法替换列表中的项目,原因是:TypeError:列表索引必须是整数或切片,而不是 str
- r - 如何在ggplot2中导入手绘形状?(“ggplot2 图画书”)
- vim - 我已经按照存储库中的说明逐步在 Windows 中安装了 vim vundle,但是当我打开任何 vim 文件时出现错误
- swift - 如何获得返回的特定结构类型?