gpt4 book ai didi

javascript - Bluebird promise resolve(data) 在客户端代码中未定义

转载 作者:搜寻专家 更新时间:2023-10-31 23:31:31 25 4
gpt4 key购买 nike

你好。我有一个简单的应用程序,客户期望得到一个 promise 结果,但在调用 resolve() 方法时,promise 一直返回 undefined 作为结果。

客户端代码:

UsersRepo.findOneAsync({id: id}).then(function(err, result) {
console.log("UserService promise resolution", err, result);
});

这分别为错误和结果输出“null”和“undefined”

执行工作并返回 promise 的代码:

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 的 reject 和 resolve 只接受一个参数。第一个'null'只是被看到了。将代码更改为“resolve(res)”有效。谢谢大家。

最佳答案

Resolve/Reject 都接受一个参数 ... 因此你的结果是未定义的,因为你传递给 resolve 的第二个值从未被使用过,而第一个是 null

你想做的是

UsersRepo.findOneAsync({id: id}).then(function(result) {
console.log("UserService promise resolution", result);
}).catch(function(err) {
console.log("UserService promise error", err);
});

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(res);
}
});
});

return promise;
}

关于javascript - Bluebird promise resolve(data) 在客户端代码中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33966436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com