我创建了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
答案 0 :(得分:0)
Promise.prototype.then
会返回一个新的Promise
,因此您正在记录Promise
的实例,而不是实际值。在提供给then方法的函数中调用console.log
将记录实际值(除非发生错误。)