首先 - 我們在這裏處於未讀領域,所以雖然它在最新的firefox中工作,但MDN上的文檔在編寫期間還沒有準備好。稍後我會修復MDN(也許,有很多地方需要修復),所以我會提供一個glossary。ECMA和諧 - 生成器回調
我想從一個回調創建的Iterator:
我有一個使用兩個回調作爲參數構造一類。我們稱實例爲「偵聽器」。這個監聽器然後用一些參數重複地調用第一個回調,直到它完成監聽,然後調用第二個回調。
我想包裝一個迭代器,這將產生每個參數,即偵聽器調用第一個回調,然後一旦調用第二個回調就會拋出StopIteration。
像這樣:
var magicIter = new MagicIter();
var listener = new Listener(magicIter.ready, magicIter.finished);
//on another thread, listener calls ready(1); ready(2); finished();
exhaustIterator(magicIter); //loops over magicIter and does stuff with it.
//listener has called finished, so magicIter has thrown StopIteration
//so the loop in exhaustIterator has stopped
請注意,我做的這一切在附加組件SDK插件,這樣我就可以使用promises和相關的東西。並且不需要關於瀏覽器怎麼知道我想要做什麼的講座;)
/編輯:如果你問我爲什麼不把所有東西都轉換成基於回調的代碼have a taste並告訴我如何將其轉換爲基於回調的代碼而不用流淚流淚。我只是將我的主要功能包括在here中。
我還在學習ES6,但是這聽起來像是兩個迭代(一個是'for..of',另一種是聽衆重複調用回調)。你想用這個做什麼? – bfavaretto
令我困惑的是,您似乎想要以不可能的方式混合同步和異步操作。 – bfavaretto
我有一個基於回調的東西(偵聽器),和一個接受迭代器的函數(它在這裏用for循環表示)。我會改變這個問題來澄清這一點。將所有東西都改爲基於回調的代碼是一件非常痛苦的事情,因爲'exhaustIterator'委託給子函數,它也接受迭代器等等。 –