希亚斯。我有一个简单的应用程序,客户端期望得到一个承诺作为结果,但是在调用resolve()方法时,承诺不断返回未定义的结果。
客户端代码:
UsersRepo.findOneAsync({id: id}).then(function(err, result) {
console.log("UserService promise resolution", err, result);
});
这分别针对 err 和 result 输出“null”和“undefined”
正在执行工作并返回承诺的代码:
findOneAsync: function(args) {
var where = ""; //omitted
var promise = new Promise(function(resolve, reject) {
db.query("Select * from users" + where + " limit 1", function(err, result) {
var res = { id: 1, username: 'username', firstName: 'First', lastName: 'Last' };
if(err != null) {
console.log("REJECT", err);
reject(err);
}
else {
console.log("RESOLVE", res);
resolve(null, res);
}
});
});
return promise;
}
正如您所看到的,我只是为此测试返回一些静态数据(“res”变量)。在客户端代码中,控制台语句总是打印出:
UserService promise resolution null undefined
我不明白这一点。看起来我做的一切都是正确的:用数据调用resolve()方法,并且客户端代码正确地使用.then(function(err, result)),看起来是这样。为什么客户端收不到数据?
谢谢你的帮助!
==>
解决方案:
如下所述,Bluebird 的拒绝和解决仅采用一个参数。第一个“null”仅被看到。将代码更改为“resolve(res)”有效。多谢你们。