Node.js Promise,返回的结果。然后是函数

Node.js Promise,返回的结果。然后是函数,node.js,promise,Node.js,Promise,我使用bluebird作为我的节点服务器和mysql。 我有几个问题。第一个模块中有一个函数 this.__proto__.getPerson = function (personId) { promise.using(db_conn.getSqlConnection(), function (conn) { var q = 'SELECT * FROM Persons WHERE person_id = ' + conn.escape(personId) + ';';

我使用bluebird作为我的节点服务器和mysql。 我有几个问题。第一个模块中有一个函数

this.__proto__.getPerson = function (personId) {
    promise.using(db_conn.getSqlConnection(), function (conn) {
        var q = 'SELECT * FROM Persons WHERE person_id = ' + conn.escape(personId) + ';';
        return conn.queryAsync(q);
    })
        .spread(function (rows, fields) {
            return rows;
        })
        .catch(function (err) {
            throw new Error(err.message, err.code);
        });
};
如何向我学习的mysql承诺

问题1:我可以从模块promisifyed对象返回,还是必须执行以下操作:

var dbPerson = new mPerson();
promise.promisifyAll(dbPerson);
在每一个我需要的新模块中

问题2:我如何从上面的函数接收数据,当我这样做时,我什么也得不到:

dbPerson.getPersonAsync(personId).then(function(rowPerson){
            console.log(rowPerson);
        });
UPD:我打电话的时候

dbPerson.getPersonAsync(personId)
我在里面得到了结果。散开

UPD2:我知道了

console.log(dbPerson.getPersonAsync(personId));

{ _bitField: 0,
 _fulfillmentHandler0: undefined,
 _rejectionHandler0: undefined,
 _promise0: undefined,
 _receiver0: undefined,
 _settledValue: undefined,
 _boundTo: undefined }
解决方案:我删除了这一行 promisefyAlldbPerson


我认为这是因为dbPerson.getPersonpersonId已经返回了一个承诺

如果不处理错误,为什么要捕获错误?此外,您还可以将.spread缩短为.get0。在使用之前,您将丢失一个返回值。