【问题标题】:Order of Operations JS Firebase [duplicate]操作顺序 JS Firebase [重复]
【发布时间】:2020-12-16 15:25:49
【问题描述】:

谁能解释一下为什么下面的代码先执行“F”警报,然后执行“S”和“V”警报。

var status = ' ';
  database.ref('housekeeping/ongoing').once('value', function(snapshot){
    alert(status + "S");
    status = snapshot.val();
    alert(status + "V");
  });
  alert(status + "F");

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    正如您在documentation 中看到的,once 是一个异步调用。这意味着代码将继续执行同步任务,直到检索到数据。然后,您的回调中的代码将被执行。

    要首先出现“S”和“V”警报,您需要使用async/await

    async function getDatabaseData() {
      const snapshot = await database.ref('housekeeping/ongoing').once('value');
      alert(status + "S");
      status = snapshot.val();
      alert(status + "V");
      alert(status + "F");
    }
    

    More information about async/await

    【讨论】:

      【解决方案2】:

      once() 是异步的,在查询完成之前立即返回。您提供给它的回调将在一段时间后执行。

      所有 Firebase API 都是异步的,这在 JavaScript 中很常见。您还应该知道once() 也返回一个promise,并且该promise 是处理异步调用结果的更好方法。在现代 JavaScript 编程中,了解 Promise 的工作原理非常重要。

      我建议在 why the Firebase APIs are asynchronous 上阅读此博客。

      【讨论】:

        猜你喜欢
        • 2019-09-04
        • 1970-01-01
        • 2018-02-09
        • 1970-01-01
        • 1970-01-01
        • 2019-01-28
        • 1970-01-01
        • 2013-07-28
        相关资源
        最近更新 更多