Capisco come utilizzare i generatori per rendere il codice asincrono bello. Ho un semplice generatore *all
, che prende uno page
, restituirà un singolo valore.Come eseguire un'attività asincrona contro i generatori es6 in loop
Quindi ho un altro generatore *allDo
, che utilizzerà *all
per le pagine da 1 a 30 e per ogni risultato, fare un po 'asincrono task
.
Quindi ho un altro generatore *allBatchDo
, che eseguirà il batch di 3 pagine e eseguirà alcune operazioni asincrone 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);
});
}
uso Esempio di questi generatori sarebbe:
// 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));
La domanda è, questo è un uso legittimo delle caratteristiche ES6 asincrone, o c'è un abstract soluzione integrata per il mio caso d'uso?
hai dato un'occhiata a Promise.all()? – the8472
Dopo aver raccolto i valori tramite promesse, restituisco un 'task' asincrono che restituisce una promessa, che aspetto che consumi i valori, quindi ripeta il processo. Sto chiedendo è legittimo, o c'è un modo migliore? @ the8472 – eguneys
Non sono sicuro di quale sia la tua domanda. Il tuo codice è abbastanza strano; sembra che fosse meglio chiedere a [codereview.SE]. – Bergi