2

我在使用 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 的问题吗?

4

1 回答 1

-1

您忘记从 isUpdated 返回一个值

于 2014-12-31T00:43:46.303 回答