Sto cercando di utilizzare le nuove funzionalità asincrone e spero che risolvere il mio problema possa aiutare gli altri in futuro. Questo è il mio codice che funziona:
async function asyncGenerator() {
// other code
while (goOn) {
// other code
var fileList = await listFiles(nextPageToken);
var parents = await requestParents(fileList);
// other code
}
// other code
}
function listFiles(token) {
return gapi.client.drive.files.list({
'maxResults': sizeResults,
'pageToken': token,
'q': query
});
}
Il problema è che il mio ciclo while è troppo veloce e lo script invia troppe richieste al secondo all'API di google. Pertanto, vorrei creare una funzione sleep che ritardi la richiesta. Quindi potrei anche usare questa funzione per ritardare altre richieste. Se esiste un altro modo per ritardare la richiesta, per favore fatemelo sapere.
Comunque, questo è il mio nuovo codice che non funziona. La risposta della richiesta viene restituita alla funzione asincrona anonima all'interno di setTimeout, ma non so come restituire la risposta alla funzione sleep. alla funzione iniziale asyncGenerator.
async function asyncGenerator() {
// other code
while (goOn) {
// other code
var fileList = await sleep(listFiles, nextPageToken);
var parents = await requestParents(fileList);
// other code
}
// other code
}
function listFiles(token) {
return gapi.client.drive.files.list({
'maxResults': sizeResults,
'pageToken': token,
'q': query
});
}
async function sleep(fn, par) {
return await setTimeout(async function() {
await fn(par);
}, 3000, fn, par);
}
Ho già provato alcune opzioni: memorizzare la risposta in una variabile globale e restituirla dalla funzione sleep, richiamata all'interno della funzione anonima, ecc.
Promise.all
approccio. Così semplice ed elegante!