У меня есть Promise
, и я не могу заставить yield
работать рядом с ним. Я смотрю много документов/учебников, и я не думаю, что я все еще это понимаю. Я не уверен, какая часть ошибочна.Получение обещаний и доходность для совместной работы
Из того, что я прочитал, мне нужно next().value
при вызове моего генератора, так это то, что я делаю в этой функции:
exports.query = function(sql, values){
var q2 = query2(sql, values);
return q2.next().value;
};
Далее я имею generator
, которая содержит yield
:
function* query2(sql, values){
yield doQuery(sql, values);
};
Наконец я выполнить запрос и сохранить его в Promise()
function doQuery(sql, values){
return new Promise(function(resolve, reject){
conn.query(sql, values, function(err, r){
if(err){
reject(err);
}else{
resolve(r);
}
});
}).then(function(r){return r;});
}
Теперь, когда я хочу использовать это, я называю это так:
var rows = conn.query("select * from groups");
console.log(rows);
Результат console.log()
является
{}
Я знаю, что это не должно быть, потому что без yield
/Promise()
Я получаю правильные данные.
Возможно, Promise
не требуется, но из того, что я читаю, кажется, что это может быть. Что я делаю не так?
Кстати, я уверен, выполнение так:
./node --harmony /myfile.js
Вы используете ** ECMA-6 ** - браузер с поддержкой браузера (или платформу, отличную от браузера)? –
Я забыл добавить тег 'node', поэтому, чтобы ответить на ваш вопрос, я использую Node.js –
' var rows = conn.query ("select * from groups"); '- вы не имеете в виду' doQuery' или 'query2'? выглядит как опечатка. –