代码之家  ›  专栏  ›  技术社区  ›  variable

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

  •  2
  • variable  · 技术社区  · 6 年前

    我已经创建了一个提供程序来处理所有与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();
                   }
            });
          }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   philipp    6 年前

    都是 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()
     );
    

    更新

    here “;返回firebase.promise[承诺]”。所以应该是(?):

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

    当它连接起来时,第二个参数是“成功回调”。

    推荐文章