2016-11-08 22 views
0

我想要做這樣的事情。在生成器(迭代器)函數中只返回一定的收益

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的產量將是for的第一次迭代。所以我想要做的只是在cursor.next處返回yield。

這可能嗎?我已經嘗試了一些東西,但我總是得到不屬於迭代的多重收益。

感謝

+0

請看看['yield'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield)在做什麼。它暫停功能並返回值。 –

+0

是的,我瞭解收益率在做什麼。我在db和hasNext中產出的原因是我不想處理promise或callbacks。 – Pintac

+2

你可能想看看[這個答案](http://stackoverflow.com/a/29281361/1048572) – Bergi

回答

0

你在這裏混合兩種不同的東西:(1)JS發電機(2)JS,發電機使用量來模擬異步/ AWAIT。

對於(2)類似的cobluebird有一些庫,但他們都期望您可以達到yield承諾。

肯定不會與for循環一起工作,因爲它不會等待承諾解決並且不會將結果返回給生成器。

+0

我試過這樣的東西,但我一直卡在 yield cursor.hasNext() – Pintac

+0

對不起。我沒有注意到cursor.hasNext()。 – teq