【发布时间】:2015-07-30 05:39:26
【问题描述】:
由于某种原因,我返回了 [object Generator],而不是实际调用生成器函数本身。所以对于 console.log("results:" + result);我知道我正在取回一个生成器函数。
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] }
【问题讨论】:
-
yield 仅在生成器函数内有效 *
-
把它改成了一个新问题,我有一个差异问题。
-
你应该使用
Q.async,而不是Q.fbind
标签: javascript node.js