在生成器(迭代器)函数中仅返回某个yield

时间:2016-11-08 12:38:03

标签: javascript node.js ecmascript-6

我想做这样的事情。

function* iterateRecord() {

    const db = yield MongoClient.connect('');

    const collection = db.collection('');

    const query = {}


    const cursor = collection.find(query);

    while (yield cursor.hasNext()) {

        const bsonObject = yield cursor.next();
    }
}

for(record of iterateRecord())
{
    //do stuff
}

现在你可以看到这不起作用,db yield将是for的第一次迭代。所以我想做的只是在cursor.next返回yield。

这可能吗?我已经尝试了一些东西,但我总是得到不是迭代的一部分的多重收益。

感谢

1 个答案:

答案 0 :(得分:0)

你在这里混合了两个不同的东西:(1)js生成器和(2)使用js生成器来模拟异步/等待。

(2)有很多图书馆,例如cobluebird,但所有图书馆都希望您能够yield承诺。

它无法与for循环一起使用,因为它不会等待承诺解析并且不会将结果返回给生成器。