【发布时间】:2015-09-10 05:04:04
【问题描述】:
我在尝试将 Promise 结果作为收益返回给原始调用者时遇到了麻烦。
store.js
module.exports = {
find: function *(storeRequest){
if(!_gateway){
_gateway = realGateway;
}
storeResponse.http.statusCode = 200;
var stores = _gateway.find(storeRequest.id).next().value; // I want to be able to get the stores array back here ultimately by calling next() like I am trying to do here
console.log(stores[0]);
//yield storeResponse;
}
};
storeGateway.js
module.exports = {
find: function *(id){
var stores = [];
var entity;
database.find.then(function(foundStores){
entity = testUtil.createStore(foundStores[0].id, foundStores[0].name);
console.log("ENTITY:");
console.log(entity);
stores.push(entity);
console.log("STORES[0]:");
console.log(stores[0]);
// I am getting the results here successfully so far when I console.log(stores[0])! But now I want to return stores now from here and yield the array so it propogates up to the caller of storeGateway's find()
// yield entity; --- this doesn't work because I think I'm in the promise then scope
}
);
//yield entity; -- and this definitely won't work because it's not in the promise callback (then)
}
};
database.js
var co = require('co');
var pg = require('co-pg')(require('pg'));
var config = require('./postgreSQL-config');
var database = module.exports = {};
var _id;
var _foundStores;
database.find = co(function* poolExample(id) {
var query = "Select id, name from stores";
try {
var connectionResults = yield pg.connectPromise(config.postgres);
var client = connectionResults[0];
var done = connectionResults[1];
var result = yield client.queryPromise(query);
done();
console.log("PRINTING ROWS:");
console.log(result.rows[0]);
_foundStores = yield result.rows;
} catch(ex) {
console.error(ex.toString());
}
console.log("RESULTS!:");
console.log(_foundStores);
return _foundStores;
});
我在上面看到的每个 console.log 上都打印了数据。我只是不知道如何从 storeGateway 的 find() 方法返回存储,因为它在 promise 结果中接收存储数组(在 .then() 中),我需要能够将其返回到上游。
(请参阅我在代码中的注释,我正在尝试从我的 store.js 的 find 生成器函数返回 promise 中找到的商店,然后返回上游)。
【问题讨论】:
-
如果您之前已经访问过
result.rows[0],_foundStores = yield result.rows;毫无意义。你为什么做这个?日志中的rows[0]是什么(或者:你期望它是什么)? -
是的,以前只是测试
标签: javascript node.js promise generator co