Firebase数据库有时会缓慢更新

时间:2016-06-29 19:43:45

标签: javascript jquery ajax node.js firebase

大家早上好,我对firebase数据库的行为有疑问。

我在我的数据库user上填充了一个终点,我的客户端向我的快速服务器app.js发出了多个POST请求,如下所示:

element.on("click", function(){
  send request 1 - endpoint1
  send request 2 - endpoint2
  send request 3 - endpoint3
}

然后在我的app.js中,我在使用Request包的路由上有处理程序对Halo Waypoint API发出三个单独的GET请求,如下所示:

app.post(endpoint1, function(req,res){
  request(HaloAPI + endpoint1, function(error, res, body){
    [store data from the response body into an 
     object to be sent to firebase endpoint 'user']
    // User's stats
    database + "/user".set(dataObject)

  }
}    
app.post(endpoint2, function(req,res){
  request(HaloAPI + endpoint2, function(error, res, body){
    [store data from the response body into an 
     object to be sent to firebase endpoint 'user'.
     This is a url for an image]
    //This is a player's emblem
    database + "/user/emblem".set(dataObject)

  }
}

app.post(endpoint3, function(req,res){
  request(HaloAPI + endpoint3, function(error, res, body){
    [store data from the response body into an 
     object to be sent to firebase endpoint 'user'.
     This is a url for an image]
    //This is a player's Spartan portrait
    database + "/user/spartanImage".set(dataObject)

  }
}

我希望数据库能够同时更新;然而,事实并非如此。通常当我单击带有事件监听器的按钮时,端点2和3与来自端点1的数据同时进入,但大多数时候我只从端点2 获取数据端点3.最终我停止从端点2和3一起获取数据。事实上,通过这个当前设置,我可以看到端点user/emblemuser/spartanImage填充在数据库控制台中,但随后它们会在添加后立即被删除。从一开始这个项目开始,这一直困扰着我,我真的很感激来自Firebase的人比我更有经验。下面我将链接我的相关代码,提前感谢您的帮助。

request.js是客户端初始AJAX调用的地方:

$searchButton.on("click", function(event){
    event.preventDefault();
    // the value of the search field creates the request object
    // it is just a user's Xbox Live Gamertag and is used for the
    // the subsequent requests.
    var $search = $("#searchField").val();
    $.post(homeRoute + "statSearch", {search: $search}, function(data){
        console.log(data)

    });

    firebase.database().ref().on("value", function(snapshot){
    function ez(path){
      return snapshot.child(path).val();
    }

    var dataObject = { 
      gamertag: ez("gamertag"),
      totalKills: ez("totalKills"),
      totalDeaths: ez("totalDeaths"),
      totalGames: ez("totalGames")
    };    

    console.log(dataObject)

  });

    $.post(homeRoute + "emblemSearch", {search: $search}, function(data){
        console.log(data)
    });

    $.post(homeRoute + "spartanSearch", {search: $search}, function(data){
        console.log(data)
    }); 

从那里我们转到app.js我的快速服务器,向Halo Waypoint API发出GET请求,并将我想要的数据格式的响应发送到firebase:

app.post("/statSearch", function(req, res){
    var search = req.body.search;

    var statsOptions = new Options("https://www.haloapi.com/stats/h5/servicerecords/warzone?players="+search);

        request(statsOptions, function (error, response, body) {
          if (error) throw new Error(error);
          var body = JSON.parse(response.body)

          var playerData = {
            gamertag: body.Results[0].Id,
                totalKills: body.Results[0].Result.WarzoneStat.TotalKills,
                totalDeaths: body.Results[0].Result.WarzoneStat.TotalDeaths,
                totalGames: body.Results[0].Result.WarzoneStat.TotalGamesCompleted
          };
    res.send(playerData)
    var userRef = ref.child("user");
    // sending off the data object to Firebase at the "user" endpoint
    userRef.set(playerData);
        });
});

//emblem
app.post("/emblemSearch", function(req, res){
var search = req.body.search;
var imgOptions = new Options('https://www.haloapi.com/profile/h5/profiles/'+search+'/emblem', '512');

        request(imgOptions, function (error, response, body) {
          if (error) throw new Error(error);
          var imgString = response.request.uri.href;

          res.send(imgString);

          var emblemRef = ref.child("user/emblem");
          // sending off the url to Firebase at the endpoint "user/emblem"
          emblemRef.set(imgString);
        });
});

//spartan image 
app.post("/spartanSearch", function(req, res){
var search = req.body.search
var spartanOptions = new Options('https://www.haloapi.com/profile/h5/profiles/'+search+'/spartan', '256');

request(spartanOptions, function (error, response, body) {
  if (error) throw new Error(error);

  var imgString = response.request.uri.href;

    res.send(imgString);

    var spartanImage = ref.child("user/spartanImage");
    // doing the same as emblem to this endpoint^^^^
    spartanImage.set(imgString);
    });
});

0 个答案:

没有答案