У меня возникли проблемы с попыткой вернуть результаты обещания в качестве возврата к исходному абоненту.Выход из конечной области обещания изнутри функции генератора
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;
});
я получаю PRI данных на каждом console.log вы видите выше. Я просто не знаю, как вернуть магазины из метода find() storeGateway, так как он получает массив магазинов в результате обещания (в .then()), и мне нужно уметь возвращать его обратно вверх.
(см. Мой комментарий в коде, я пытаюсь вернуть найденные магазины в то, что было обещано тогда назад по течению от моей функции store.js find generator).
'_foundStores = result.rows доходности;' не имеет никакого смысла, если вы ранее уже делали доступа 'result.rows [0]'. Зачем ты это делаешь? Что такое 'rows [0]' в журнале (или: что вы ожидаете от него)? – Bergi
Yea, что предыдущий был просто тестированием – PositiveGuy