繁体   English   中英

JavaScript 异步/等待功能出现问题

[英]Trouble with JavaScript async/await functions

我是 JS 的初学者,目前正在做一个项目,我正在从 Firebase 实时数据库中提取基本信息。 我有一个 function 用于检查数据库中有多少项目,另一个则获得特定值。 当我检查它们在这些方法中返回的值时,很好 - 当我在其他地方调用它们时就会出现问题。 我相信这是由于这些功能的异步性质。 我不确定如何构造它们以避免这个问题。 我知道我需要使用 Promises 和 the.then function 但我不确定该怎么做。 这是我的两个功能:

var urls = [];
function gotData(data) {
  var number = randomNumberGenerator();
  dbRefObject.once("value", function (snapshot) {
    snapshot.forEach(function (childSnapshot) {
      var childData = childSnapshot.val().URL;
      urls.push(childData);
    });
  });
}

function randomNumberGenerator() {
  dbRefObject.on("value", (snap) => {
    var totalRecord = snap.numChildren();
    console.log(Math.floor(Math.random() * totalRecord));
  });
}

当我将 console.log 语句放入这些方法中时,它们可以正常工作 - 当我在其他地方调用它们时就会出现问题。 例如,当我在其他地方调用 urls 数组时,它不会返回除“未定义”之外的任何内容。 我将非常感谢任何帮助。

dbRefObject.once本质上是异步的(流)

// This is async in nature
dbRefObject.once("value", function (snapshot) {
  snapshot.forEach(function (childSnapshot) {
    var childData = childSnapshot.val().URL;
    urls.push(childData);
  });
});
// urls will be undefined here

如何访问网址,

解决方案:使用回调函数

dbRefObject.once("value", function (snapshot) {
  snapshot.forEach(function (childSnapshot) {
    var childData = childSnapshot.val().URL;
    urls.push(childData);
    urlsUpdated(urls)
  });
});

function urlsUpdated(urls) {
  // Do something herer
  console.log(urls)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM