2016-04-30 48 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。这工作。我有点与承诺混淆。 –