如何在Sequelize Js中使用Promise来返回实体

var user = db.User.find({ where: { username: username }}).then(function(user) { console.log("Authenticate"+user.authenticate(password)); if (!user) { return null; } else if (!user.authenticate(password)) { return null; } else { return user; } }).catch(function(err){ return err; }); 

我用节点JS使用Sequelize JS。 我想要的用户匹配where子句的对象。 但是当我从function返回。 但它进入无限循环。 我是Node Js的新手,我不知道如何在Node Js中使用Promise。 请帮我一下

db.User.find()的返回值是一个承诺。 它永远不会是一个用户,所以你的第一条线是不正确的。

你需要做的是从promise和callback中调用处理链中的下一个函数。 这是Node中的标准做法。

如果你从promisecallback中返回一些东西,它被认为是另一个承诺,它允许你在一行中链接多个promise( 例子 )。 这不是你要找的。

你的例子会更好,如下所示:

 function authentication(err, user){ // Do something } db.User.find({ where: { username: username }}).then(function(user) { console.log("Authenticate"+user.authenticate(password)); if (!user) { authentication(null, null); } else if (!user.authenticate(password)) { authentication(null, null); } else { authentication(null, user); } }).catch(function(err){ authentication(null, user); }); 

请注意使用callback来表示您的身份validationtesting的结果。 还要注意,作为标准节点约定的callback的第一个参数。