获得承诺和收益共同合作

时间:2015-04-10 19:38:37

标签: javascript node.js

我创建了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

1 个答案:

答案 0 :(得分:0)

Promise.prototype.then会返回一个新的Promise,因此您正在记录Promise的实例,而不是实际值。在提供给then方法的函数中调用console.log将记录实际值(除非发生错误。)