J'essaie d'utiliser les nouvelles fonctionnalités asynchrones et j'espère que la résolution de mon problème aidera les autres à l'avenir. Voici mon code qui fonctionne:
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
});
}
Le problème est que ma boucle while s'exécute trop rapidement et que le script envoie trop de requêtes par seconde à l'API Google. Par conséquent, je voudrais créer une fonction de veille qui retarde la demande. Ainsi, je pourrais également utiliser cette fonction pour retarder d'autres requêtes. S'il existe un autre moyen de retarder la demande, veuillez m'en informer.
Quoi qu'il en soit, c'est mon nouveau code qui ne fonctionne pas. La réponse de la demande est renvoyée à la fonction asynchrone anonyme dans le setTimeout, mais je ne sais pas comment je peux retourner la réponse à la fonction sleep resp. à la fonction asyncGenerator initiale.
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);
}
J'ai déjà essayé quelques options: stockage de la réponse dans une variable globale et retour de la fonction sleep, rappel dans la fonction anonyme, etc.
Promise.all
approche. Si simple et élégant!