2014-11-06 133 views
0

爲條件我有一個函數isValidCode(code)其計算結果爲真,並返回一個布爾值(我檢查使用typeof()類型)。評估功能節點

我用這個功能來作爲條件的IF語句:

if(isValidCode(code)){ 
    console.log('Code is valid!'); 
}else{ 
    console.log('Code is not valid!'); 
} 

這不是工作由於某種原因,即使該函數的計算結果爲true,執行else語句。爲什麼是這樣?我正在使用node.js.

的isValid功能:

exports.isValidCode = pool.pooled(function(client, Code){ 
    var valid; 
    client.query('SELECT EXISTS(SELECT * FROM codes where code = $1)', [Code], function(err,result){ 
    if (err) console.log('isValidCode error: ' + err); 
    console.log('isValidCode?: ' + result.rows[0].exists); 
    valid=result.rows[0].exists; 
    console.log(typeof(result.rows[0].exists)); 
    }); 
    return valid; 
}); 
+1

你可以分享'isValidCode'的代碼嗎? – mscdex 2014-11-06 20:24:58

+0

是的,我們需要看看你的'isValidCode()'函數來判斷它是否返回你想要的。 – 2014-11-06 20:32:59

+0

'typeof()'打印布爾btw。 – 2014-11-06 20:42:59

回答

0

你傳遞給client.query功能是一個回調。一旦查詢返回,這將被異步調用。但是isValidCode在返回之前不會等待該回調。它會調用client.query並繼續到下一行,這是return語句。該函數將在valid的值可以設置爲任何值之前返回。

0

isValidCode是一個異步函數。這意味着在評估if語句時,isValidCode將評估爲未定義,因此「else」部分中的代碼將運行。

你可以重寫這個函數作爲回調或事件。這裏是回調版本

isValidCode(code, function(result){ 
    if(result){ 
     // do stuff if result is true 
    } else { 
     // otherwise, do other stuff 
    } 
});