使用普通jquery进行firebase匿名身份验证

时间:2015-11-22 11:06:08

标签: javascript jquery firebase promise deferred

我正在努力理解延期和承诺。在理解核心概念之前,我不想使用任何库angularfire等。这就是我想要做的事情并且总是处于错误状态。请指教。  ........

 var defObj = $.Deferred();
 var fbref = new Firebase(<<firebase url>>);
 defObj.done(function() {
           console.log('Success')
          }
        );

 defObj.fail(function() {
           console.log('Fail')
          }
        );

  defObj.resolve(
          fbref.authAnonymously(function(error, authData) {
                if (error) {
                  defObj.reject();
                }
                /*
                else if (authData) {
                    defObj.resolve();
                }
                    */
   }); 
   return defObj.promise(); 
   ........

请忽略任何语法错误。之前我把fbref.auth匿名调用包装在一个单独的函数中。在调试模式下它失败但在运行模式下它总是成功。 我确信我的firebase实例未启用匿名身份验证。

编辑:misspelt title。

1 个答案:

答案 0 :(得分:2)

Promise现在是JavaScript的官方部分,您可以在没有库的最新浏览器中使用它们。

function authAnonymously() {
  // 1
  var promise = new Promise(
    function(resolve, reject) {
      var ref = new Firebase(<<firebase url>>);
      ref.authAnonymously(function(error, authData) {
        if (error) {
          reject(error); // 2
        } else {
          resolve(authData); // 3
        }
      });
  });
}

authAnonymously()
  .then((authData) => console.log(authData)) // 4
  .catch((error) => console.error(error)); // 5

以下是此示例中的五个步骤

  1. 创建Promise构造函数
  2. 如果异步操作是错误的,请使用reject()功能对其进行标记。
  3. 如果异步操作要成功,请使用resolve()函数标记它。
  4. 调用authAnonymously()函数并使用then()函数开始承诺链。成功后,此功能将启动。
  5. 使用error()函数继续保证链。如果发生错误,catch()函数将不会触发,但此error()函数将会触发。
  6. 承诺适用于一次性回调。对于Firebase,这非常适用于身份验证方法和once()调用。这对于重复回调来说并不是很好,例如on()函数。