簡體   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