执行条件后执行它的内容的Javascript

我使用NodeJS v0.10.33 / Javascript有一个奇怪的问题。 我也使用Hapi 8.0.0mongoosemomentrequest库。

我试图运行一个简单的IF,必须等待方法调用,以确定条件是TRUE还是FALSE。 相反,默认运行,我的代码在条件本身之前运行条件内容。 这就像总是运行“真”,而不用等待被调用方法的返回。

我有这样的事情:

 function isUpdated(){ var updated = true; if (updated) { console.log("Updated (inside isUpdated)"); } else { console.log("Not updated (inside isUpdated)"); } } if (!isUpdated()) { console.log("Not updated. Updating.."); } else { console.log("Updated"); } 

但是当我运行我的服务器时,我得到了:

 [paladini@pet01 myFolder]$ node server.js Server running at: http://pet01.inf.ufsc.br:3000 Not updated. Updating.. Updated (inside isUpdated) 

如您所见,IF内容在条件本身之前运行。

我的完整代码如下(首先执行update() ):

 function isUpdated(myTicker) { myTicker = myTicker || undefined Ticker.count({}, function(err, count){ if (!err) { // Verify if must check all tickers or just one. if (myTicker == undefined) { if (count == 0) { console.log("Exchanges count = 0"); } else { // Checking if the database is outdated (must update every 2 minutes). Ticker.find().lean().exec(function(err, allTickers){ if (!err) { if (moment(allTickers[0].updatedAt) >= moment().subtract(2, 'm')) { console.log("Entered IF, already updated."); return true; } } else { console.log("Erro!"); } }); } } else { console.log("Ticker defined, nothing to do."); } } return false; }); } function update(callback) { var atualizado = isUpdated(); if (!atualizado) { // Updating exchanges informations. var exchangesUpdated = {value: 0}; var updateAll = function() { api.bitcoinToYou.updateTicker(exchangesUpdated); } console.log("Not updated. Updating.."); updateAll(); // Waiting to run the callback. var timeoutTime = 50; var myFunctionToTimeout = function() { // Get the exchanges count Ticker.count({}, function(err, count){ if (!err) { if (exchangesUpdated["value"] != count) { setTimeout(myFunctionToTimeout, timeoutTime); } else { callback(); } } }); } setTimeout(myFunctionToTimeout, timeoutTime); } else { console.log("Updated.") callback(); } } 

我们有以下情况:

  1. 第一次update()被执行:数据库被更新并返回。
  2. 2分钟前执行:未更新并返回。
  3. 2分钟后执行:数据库更新并返回。

问题是在2º的情况下:数据库总是更新(我认为isUpdated()方法是好的,更新()是错误的)。 当我模拟2º的情况下,我有这个日志在terminal:

 [paladini@pet01 myProject]$ node server.js Server running at: http://pet01.inf.ufsc.br:3000 Not updated. Updating.. Entered IF, already updated. 

我做什么错了? 这是NodeJS还是Hapi的问题?

你忘了从isUpdated返回一个值

Interesting Posts