无法通过某些回调返回对象

Trouble returning object through some Callbacks

我能够取回数据,但我似乎无法通过上面的一些方法取回结果:

car.js

'use strict';

var Q = require('q');
var pg = require('co-pg')(require('pg'));
var config = require('../../models/database-config');

var car = module.exports = {};

car.find = Q.async(function *(id)
{
    var query = 'SELECT id, title, description FROM cars WHERE id = ' + id;

    var connectionResults = yield pg.connectPromise(config.connection);

    var client = connectionResults[0];
    var done = connectionResults[1];

    var result = yield client.queryPromise(query);
    done();

    console.log("value: " + result.rows[0].id);

    return result.rows;
});

这 returns 我的 console.log 的有效值,所以我知道我正在取回数据。

但是现在,当我尝试将其备份到堆栈时,在这里我似乎在使用此方法后丢失了它:

database.js

module.exports = {
    models: {
        car: _carModel
    },
    find: Q.async(_find)
};

    function _find(carId)
    {
        _carModel.find(carId)
        .then(function(result){
                 console.log('result[0].id: ' + result[0].id);

                return result;
         })
        .catch(function(error){
                console.log("promise error: " + error);
         })
        .done();
    };

所以这也有效,我得到了 console.log('result[0].id: ' + result[0].id);

的有效值

但是现在当尝试调用这个函数时,我失去了结果:

gateway.js

var car = database.find(carId);
                 console.log("car: " + car.id);
...

这里我得到一个'Cannot read property 'id' of undefined]'

更新 #2

所以我现在正尝试传播承诺,但仍然未定义行 console.log("returned car data: " + data); 'data' 未定义。

gateway.js

module.exports = {
    data: function(someData){
        _data = someData;
    },
    find: function(text, result){

        if(!text){
            results(null);
        };

        var endpoint =  _endpoint.replace(/_text/g, text);

         _client.query(endpoint, function(results){

             var cars = [];
             var car;

             for (var i = 0; i < results.docs.length; i++){

                 var carId = results.docs[i].id;

                 car = database.find(carId)
                 .then(function(data){
                         console.log("returned car data: " + data);
                     })
                 .done();

                 cars.push(car);
             }

             result(cars);
        });
    }

database.js

'use strict';
var Q = require('q');

var _obituaryModel = require('../../models/postgreSQL/obituary');

module.exports = {
    models: {
        obituary: _carModel
    },
    find: Q.async(_find)
};

function _find(carId)
{
    _carModel.find(carId)
    .then(function(result){

            console.log('result[0].id: ' + result[0].id);

            return result;
     })
    .catch(function(error){
            console.log("promise error: " + error);
     })
    .done();
};

carModel.js

'use strict';

var Q = require('q');
var pg = require('co-pg')(require('pg'));
var config = require('../../models/database-config');

var car = module.exports = {};

car.find = Q.async(function *(id)
{
    var query = 'SELECT id, title, description FROM cars WHERE id = ' + id;

    var connectionResults = yield pg.connectPromise(config.connection);

    var client = connectionResults[0];
    var done = connectionResults[1];

    var result = yield client.queryPromise(query);
    done();

    console.log("value: " + result.rows[0].id);

    return result.rows;
});

您不能 return 来自异步函数的数据。

看这里:How to return value from an asynchronous callback function?

您正在控制台上打印 result[0].id,但在实际调用时读取 result.id

尝试

var car = database.find(carId);
             console.log("car: " + car[0].id);
...

您有一个 promise 对象供您使用,请使用它。

database.js中:

return _obituaryModel.find(carId)

gateway.js

var car = database.find(carId);
car.then(function (data) {
    console.log(data);
});