在客户端代码中未定义Bluebird promise resolve(数据)

Rya*_*iss 3 javascript node.js promise bluebird

Hiyas.我有一个简单的应用程序,其中客户端期望作为结果的承诺,但在调用resolve()方法时,promise将继续返回undefined作为结果.

客户端代码:

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

对于错误和结果,它分别输出"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;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我只是为此测试返回一些静态数据('res'变量).在客户端代码中,控制台语句始终打印出:

UserService promise resolution null undefined
Run Code Online (Sandbox Code Playgroud)

我不懂.看起来我正在做的一切正确:用数据调用resolve()方法,客户端代码正确使用.then(函数(错误,结果)),所以看起来如此.为什么不从客户端收到数据?

谢谢你的帮助!

==>

解:

如下所述,Bluebird的拒绝和解决只接受一个论点.第一个'null'只被看到了.将代码更改为'resolve(res)'工作.多谢你们.

Jar*_*a X 7

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;
}
Run Code Online (Sandbox Code Playgroud)