由于某些原因,我返回对象生成器,而不是实际调用生成器函数本身。所以对于console.log(“结果:”+结果),我得到了一个生成器函数。
gateway.js
function _find(carId)
{
var result = _carModel.find(carId);
console.log("results: " + result);
return result;
};carModel.js
'use strict';
var pg = require('co-pg')(require('pg'));
var config = require('../../models/postgreSQL-Config');
var car = module.exports = {};
car.find = function *(id)
{
var query = 'SELECT id, title, description, source FROM car WHERE id = ' + id;
var poolConnection = yield pg.connectPromise(config.connection);
var client = poolConnection[0];
var done = poolConnection[1];
var result = yield client.queryPromise(query);
done();
return result.rows;
};

更新
我首先尝试了Q,下面是我尝试的方法:
gateway.js
function _find(carId)
{
_carModel.find(carId)
.then(function(result){
console.log(result);
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/postgreSQL-Config');
var car = module.exports = {};
car.find = Q.fbind(function *(id)
{
console.log("GOT HERE!!!!!!");
var query = 'SELECT id, title, description, source FROM car WHERE id = ' + id;
var poolConnection = yield pg.connectPromise(config.connection);
var client = poolConnection[0];
var done = poolConnection[1];
var result = yield client.queryPromise(query);
done();
console.log("RRRRRROOOOOOWWWS: " + result.rows);
return result.rows;
});它再也不会访问我的find方法,现在我在终端中获得了这个方法,用于记录您在我的网关函数中看到的结果:
{ _invoke: [Function: invoke] }
{ _invoke: [Function: invoke] }
{ _invoke: [Function: invoke] }
{ _invoke: [Function: invoke] }发布于 2015-07-30 07:04:04
调用生成器函数确实会返回生成器,而不是结果。您可以使用.next()逐步通过生成器。
但是,听起来您要寻找的是用类似于co.wrap或Q.async的东西包装生成器函数(还有很多其他功能)。它们使您的生成器函数返回与最终结果解决的承诺。
所以您可以在carModel.js中使用这个(添加了co.wrap ):
car.find = co.wrap(function *(id)
{
// your code
});然后,您的gateway.js代码将变成:
function _find(carId)
{
return _carModel.find(carId)
.then((result) => {
console.log("results: " + result);
return result;
});
}您可以在这个博客中阅读更多有关它的信息。
https://stackoverflow.com/questions/31715887
复制相似问题