我想知道,我有两个函数,一个正在被另一个加载。
对于错误处理,我同时使用了then
和catch
。函数then
的{{1}}和catch
工作正常,但函数A()
的{{1}}和then
-{{1} }和catch
被触发,因此我无法放置正确的消息。
B()
then
因此,我尝试开发以下情况:1:页面ID无效,2:项目ID无效-我想放置适当的味精。
但是我不确定为什么它在功能catch
中可以正常工作,对于功能A() {
if ( this.page_id ) {
this.fireDB.database.ref(`/pages/${page_id}`).once("value").then(snapshot => {
this.Page = snapshot.toJSON();
console.log(this.CTRL, "[VALID] Page.id:", this.Page.id);
// Load item's details in page
this.B();
}).catch(() => {
console.log(this.CTRL, "[FAILED] Page ID not found");
this.has_errors = true;
this.error_image = "Page could not be found";
});
}
}
B() {
if ( this.page_id && this.item_id ) {
this.fireDB.database.ref(`/items/${page_id}/${item_id}`).once("value").then(snapshot => {
console.log("snapshot:", snapshot.val()); // Console log DOES show this row for some reason, value == null
this.Item = snapshot.val(); // This throw an error that Item is now null, so the template fails
# This row will never reach ( here, we jump to the `catch` )
console.log(this.CTRL, "[VALID] Item.id:", this.Item.id);
}).catch((error) => {
console.log(this.CTRL, "[FAILED] Item ID not found error:", error);
this.has_errors = true;
this.error_image = "Item could not be found";
})
}
}
,我需要添加一个[PageComponent] Requesting id: -Uyw0OY
[PageComponent] [VALID] Page.id: -Uyw0OY
snapshot: null <== Why I'm here ?
[ItemComponent] [FAILED] Item ID not found error: TypeError: "_this.Item is null"
吗?
为什么我不能只相信A()
?
即使功能B()
所请求的路径中没有答案/项目,为什么也要进入if ( snapshot.val() !== null )
?
答案 0 :(得分:0)
您所看到的完全是预期的。当您尝试登录this.Item.id
时,将引发错误,因为this.Item
为空(从您先前看到的几行空snapshot.val()
中分配)。引用空对象上的属性是一个错误-以下错误消息恰好告诉您:“ _ this.Item为空”。此错误将触发以下捕获,您将在其中进行打印。
删除此日志行,您会发现捕获未触发,因为您删除了错误源:
console.log(this.CTRL, "[VALID] Item.id:", this.Item.id);