首页 文章

使用Promise时如何进行条件检查并返回自定义对象?

提问于
浏览
2

我创建了一个提供程序来处理所有与firebase数据库相关的调用 . 如果方法getUser写为foll . 然后它返回对象(注意.once是一个promise) .

getUser()
          {
            return firebase.database().ref(`/users/`)
            .once('value', dataSnapshot => {dataSnapshot.val();
            });
          }

但是,如果对象为null,则返回null,我必须在页面级别处理此问题,如下所示:

ngOnInit() {         
    this.dbcon.getUser().then(dbvalue=>{
      if(dbvalue.val()){
     //..do soemthing.. 
     }      
    });

理想情况下,我希望提供者返回一个有效的对象或类似{sorcode:''},但不是null . 任何建议在提供者级别这样做都会有所帮助 .

我尝试在提供程序级别实现此功能,并期望它返回硬编码对象{sorcode:''} . 但它只返回null .

页面代码:

ngOnInit() {         
    this.dbcon.getUser().then(dbvalue=>{
      console.log(dbvalue.val());
    });       
  }

提供者代码(注意.once是一个承诺):

getUser()
  {
    return firebase.database().ref(`/users/`).once('value', dataSnapshot => {
           if (dataSnapshot.val()==null)
           {
              {sorcode:''};
           }
           else
           {
              dataSnapshot.val();
           }
    });
  }

如果我在IF循环中使用'return'关键字,而不是在调用promise之前(如下所示),那么它在页面上给出一个错误:“无法读取属性'然后'未定义”

提供商代码:

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();
               }
        });
      }

1 回答

  • 0

    缺少 return 个陈述 .

    之一:

    return firebase.database().ref(`/users/`).once('value', dataSnapshot => {
           if (dataSnapshot.val()==null)
           {
              return {sorcode:''};
           }
           else
           {
              return dataSnapshot.val();
           }
    });
    

    要么

    firebase.database().ref(`/users/`).once('value', dataSnapshot =>
       dataSnapshot.val() == null ? 
         {sorcode:''} :
         dataSnapshot.val()
     );
    

    UPDATE

    来自here»返回firebase.Promise [...]« . 所以应该是(?):

    firebase.database().ref(`/users/`).once('value').then(dataSnapshot => <return stuff here>);
    

    接下来,第二个论点是“成功回调”

相关问题