我已经创建了一个提供程序来处理所有与firebase数据库相关的调用。如果getuser方法被写为follow。然后它返回对象(注意,once是一个承诺)。
getUser()
{
return firebase.database().ref(`/users/`)
.once('value', dataSnapshot => {dataSnapshot.val();
});
}
但是,如果对象为空,则返回空值,我必须在页面级别处理此问题,如下所示:
ngOnInit() {
this.dbcon.getUser().then(dbvalue=>{
if(dbvalue.val()){
//..do soemthing..
}
});
理想情况下,我希望提供程序返回一个有效的对象或类似于{sorcode:'}的对象,但不返回null。任何建议在提供者级别这样做都会有帮助。
我尝试在提供者级别实现这个,并希望它返回硬编码对象{SoCald:`}。但它只返回空值。
第页代码:
ngOnInit() {
this.dbcon.getUser().then(dbvalue=>{
console.log(dbvalue.val());
});
}
提供程序中的代码(请注意,一次是承诺):
getUser()
{
return firebase.database().ref(`/users/`).once('value', dataSnapshot => {
if (dataSnapshot.val()==null)
{
{sorcode:''};
}
else
{
dataSnapshot.val();
}
});
}
如果我在if循环中使用'return'关键字,而不是在调用promise之前(如下所示),那么它会在页面上给出一个错误:“cannot read property'then'of undefined”
提供程序中的代码:
getUser()
{
firebase.database().ref(`/users/`).once('value', dataSnapshot => {
if (dataSnapshot.val()==null)
{
return {sorcode:''};
}
else
{
return dataSnapshot.val();
}
});
}
如果我在if循环中使用'return'关键字,并且在调用promise之前(如下所示),那么它仍然给出原始问题-当对象不存在时返回null。
提供程序中的代码:
getUser()
{
return firebase.database().ref(`/users/`).once('value', dataSnapshot => {
var x=dataSnapshot.val();
if (x==null)
{
return {sorcode:''};
}
else
{
return dataSnapshot.val();
}
});
}