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

Javascript 客户端代码中未定义Bluebird promise resolve(数据),javascript,node.js,promise,bluebird,Javascript,Node.js,Promise,Bluebird,你好。我有一个简单的应用程序,客户机希望得到一个承诺,但调用resolve()方法后,承诺会不断返回未定义的结果 客户端代码: UsersRepo.findOneAsync({id: id}).then(function(err, result) { console.log("UserService promise resolution", err, result); }); 这将分别为err和result输出“null”和“undefined” 执行工作并返回承诺的代码: findO

你好。我有一个简单的应用程序,客户机希望得到一个承诺,但调用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”变量)。在客户端代码中,console语句始终打印出:

UserService promise resolution null undefined
我不明白。看起来我做的一切都是正确的:用数据调用resolve()方法,客户端代码使用.then(function(err,result)),看起来是正确的。为什么没有从客户端接收数据

谢谢你的帮助

==>

解决方案:


正如下面提到的,蓝鸟的拒绝和解决只需要一个论点。第一个“null”只被看到。将代码更改为“resolve(res)”有效。谢谢大家。

解决/拒绝两个都接受一个参数。。。因此,为什么结果是未定义的,因为传递给解析的第二个值从未使用过,而第一个值为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;
}

蓝知更鸟的
然后
不会接受
错误
。相反,它接受两个函数,第一个用于解析,第二个用于拒绝。您还可以使用
catch
处理错误

编辑:是正确的,解析函数应该只接受一个参数


除了不希望错误对象被传递到
然后
回调之外,您应该只
解析(res)

ahhh,我们开始了。嘘。谢谢大家!<代码>蓝鸟的话
=这就是所有承诺的实际运作方式,在接受哪一个答案的问题上进退两难。你先回答了,但加洛曼达似乎更彻底了。哈,哦,老兄。实际上我是先回答的,但第一并不总是最好的:你知道,你是对的!哈。。我在看“6分钟前,7分钟前”的数字,我的大脑并没有真正处理它,而是倒过来看。啊,在网上一切都好。晚安;)