我在使用 NodeJS v0.10.33 / Javascript 时遇到了一个奇怪的问题。我也在使用Hapi 8.0.0
、mongoose
和moment
库request
。
我正在尝试运行一个简单的 IF,它必须等待方法调用才能知道条件是 TRUE 还是 FALSE。相反,默认运行,我的代码在条件本身之前运行条件内容。这就像总是运行“TRUE”而不等待被调用方法的返回。
我有类似的东西:
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();
}
}
我们有以下场景:
- 第一次执行 update():数据库更新并返回。
- 2 分钟前执行:未更新并返回。
- 2分钟后执行:数据库更新并返回。
问题在于 2º 场景:数据库总是更新(我认为 isUpdated() 方法没问题, update() 是错误的)。当我模拟 2º 场景时,我在终端中有这个日志:
[paladini@pet01 myProject]$ node server.js
Server running at: http://pet01.inf.ufsc.br:3000
Not updated. Updating..
Entered IF, already updated.
我做错了什么?这是 NodeJS 或 Hapi 的问题吗?