gpt4 book ai didi

Javascript 在执行其内容后有条件地执行

转载 作者:行者123 更新时间:2023-11-30 06:53:12 27 4
gpt4 key购买 nike

我在使用 NodeJS v0.10.33/Javascript 时遇到了一个奇怪的问题。我还在使用 Hapi 8.0.0mongoosemomentrequest 库。

我正在尝试运行一个简单的 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();
}
}

我们有以下场景:

  1. 第一次执行 update():更新数据库并返回。
  2. 2 分钟前执行:未更新并返回。
  3. 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 的问题?

最佳答案

您忘记从 isUpdated 返回一个值

关于Javascript 在执行其内容后有条件地执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27714600/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com