出于某种原因,我得到[object Generator]而不是实际调用生成器函数本身。所以对于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] }
答案 0 :(得分:1)
调用生成器函数确实会返回生成器,而不是结果。您可以使用app.controller('main',['$scope',function($scope) {
$scope.title = '';
}])
.directive('button',['$compile',function($compile) {
return {
restrict: 'AE',
link: function(scope,element) {
element.bind('click',function() {
var p = $compile('<p ng-bind="title"></p>')(scope);
p.insertBefore(element);
});
}
}
}])
逐步完成生成器。
但听起来你正在寻找的是用co.wrap或Q.async(还有很多其他的东西)来包装你的生成器函数。它们使你的生成器函数返回一个可以用最终结果解析的Promise。
所以你在.next()
(添加了carModel.js
)中有这个:
co.wrap
然后您的car.find = co.wrap(function *(id)
{
// your code
});
代码将成为:
gateway.js
您可以在this blogpost中了解更多相关信息。