Ich verstehe, wie man Generatoren verwendet, um asynchronen Code schön aussehen zu lassen. Ich habe einen einfachen Generator *all
, der eine page
nimmt, wird einen einzelnen Wert zurückgeben.So führen Sie eine asynchrone Aufgabe gegen es6-Generatoren in Schleife durch
Dann habe ich einen anderen Generator *allDo
, der *all
für die Seiten 1 bis 30 verwenden wird und für jedes Ergebnis async task
tun.
Dann habe ich einen anderen Generator *allBatchDo
, der 3 Seiten Stapel wird, und tun einige asynchrone task
.
function mockPromise(value) {
return Promise(function(resolve, reject) {
resolve(value);
});
}
function *all(page) {
var ls = yield mockPromise("page " + page);
// do all kinds of promises
return yield ls;
};
function *allDo(task) {
var page = 1;
while (true) {
var res = yield * all(page);
res = yield task(res);
if (page == 30) {
break;
}
page++;
}
}
function *allBatchDo(task) {
var page = 1;
var arr = [];
while (true) {
var res = yield * all(author, page);
arr.push(res);
if (arr.length >= 3) {
yield task(arr);
arr = [];
}
if (page == 30) {
break;
}
page++;
}
}
function logTask(res) {
return mockPromise(res).then(function(v) {
console.log(v);
});
}
Beispiel für die Verwendung dieser Generatoren wäre:
// return a single page promise
async(all(1)).then(function(value) { console.log(value); });
// do `logTask` for all pages 1 thru 30
async(allDo(logTask));
// do `logTask` for all pages with batches of 10
async(allBatchDo(logTask));
Die Frage ist, ist dies eine legitime Verwendung von es6 Asynchron-Funktionen, oder gibt es eine abstrakte integrierte Lösung für meinen Anwendungsfall?
Haben Sie sich Promise.all() angesehen? – the8472
Nachdem ich Werte durch Versprechen gesammelt habe, gebe ich eine asynchrone "Aufgabe" ab, die ein Versprechen zurückgibt, auf das ich warte, bis es die Werte verbraucht hat, und dann den Prozess wiederhole. Ich frage, ist das legitim, oder gibt es einen besseren Weg? @ the8472 – eguneys
Ich bin mir nicht sicher, was deine Frage ist. Dein Code ist ziemlich merkwürdig; Das sieht so aus, als wäre es bei [codereview.SE] besser gefragt worden. – Bergi