获取生成器函数作为对象返回,而不是实际调用生成器函数

出于某种原因,我得到[对象生成器]返回,而不是实际调用生成器函数本身。 所以对于console.log(“结果:”+结果); 我得到,我回来了发电机function。

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; }; 

在这里输入图像说明

UPDATE

我首先尝试了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; }); 

它从来没有再次打我的查找方法,我现在得到这个在terminallogging的结果,你看到我的网关function:

 { _invoke: [Function: invoke] } { _invoke: [Function: invoke] } { _invoke: [Function: invoke] } { _invoke: [Function: invoke] } 

调用一个生成器函数确实返回一个生成器,而不是结果。 您可以使用.next()浏览生成器。

但是这听起来像你正在寻找的是包装你的生成器函数像co.wrap或Q.async (还有很多其他)。 他们让你的生成器函数返回一个Promise来解决最终的结果。

所以你可以在carModel.js (加上co.wrapjoin这个:

 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; }); } 

你可以阅读更多关于它在这个博客 。