【问题标题】:using plain jquery for firebase anonymous authentication使用纯 jquery 进行 firebase 匿名身份验证
【发布时间】:2015-11-22 11:06:08
【问题描述】:

我试图理解 deferred 和 promise。在理解核心概念之前,我不想使用任何库 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.authAnonymously 调用包装在一个单独的函数中。在调试模式下它会失败,但在运行模式下它总是会成功。 我确定我的 firebase 实例未启用匿名身份验证。

已编辑:标题拼写错误。

【问题讨论】:

    标签: javascript jquery firebase promise deferred


    【解决方案1】:

    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() 函数会。

    Promise 适用于一次性回调。对于 Firebase,这对于身份验证方法和 once() 调用非常有用。这对于重复的回调来说不是很好,比如on() 函数。

    【讨论】:

    • 由于代码格式化无法发布我的代码,这真的很痛苦。 Promise.defer() 似乎已过时,我不得不转换为 Promise 构造函数。
    • Promise.defer() 并没有过时,您现在可以在 Chrome 中使用它。我更新了我的代码以使用 Promise 构造函数。
    • 让我知道是否还有其他需要解决的问题。保持未回答的队列干净是件好事。
    • Firefox 在抱怨。谢谢,我接受了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2021-11-19
    • 2016-06-08
    • 2017-06-03
    • 1970-01-01
    • 2018-12-22
    • 2020-12-15
    相关资源
    最近更新 更多