2016-04-30 49 views
1

我是新來的續集。我使用mysql作爲我的數據庫。我有一個sequelize查詢,它從數據庫中找到email-id。通過使用這個查詢的結果,我得到了該行的ID。現在我需要返回這個值。有人可以幫助我如何做到這一點。從續集查詢返回值

這是我的代碼。

var userId = getUserId(email_address); 
function getUserId(email_address) { 
    models.users.findOne({ 
    where: { 
     email: email_address 
    } 
    }).then(function(result) { 
     if (result) { 
     var applicantId = result.id; 
     return applicantId; // This is what I need to do 
     } else { 
     console.log("Could not find Email"); 
     } 
    }); 
} 

這裏我需要將變量applicantId返回給調用函數。

+0

首先,你不能只返回值。數據庫查詢是一個異步調用,需要像那樣處理。你的函數getUserId()需要返回一個Promise。只需返回models.users.findOne()方法。 –

+0

感謝@Himmet的回覆。當我返回models.users.findOne()時,我會在userId處得到一個promise對象。如何訪問該承諾對象的值?你能幫我解決嗎? –

+0

這裏是關於如何使用JavaScript承諾的教程http://www.sitepoint.com/overview-javascript-promises/我建議你從那裏開始。 – grimurd

回答

2

對數據庫的Sequelize調用是異步的,所以您需要稍微改變一下代碼以使用promise。事情是這樣的:

function getUserId(email_address) { 
    return models.users.findOne({ 
    where: { 
     email: email_address 
    } 
    }); 
} 

getUserId("[email protected]").then(function(result){ 
    console.log(result.id); 
}); 

退房this fiddle嘲笑你的情況

+0

謝謝@ scottjustin5000。這工作。我有點與承諾混淆。 –