새로운 비동기 기능을 사용하려고하는데 앞으로 문제를 해결하면 다른 사람들에게 도움이되기를 바랍니다. 이것은 작동하는 코드입니다.
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
});
}
문제는 내 while 루프가 너무 빨리 실행되고 스크립트가 초당 너무 많은 요청을 Google API로 보냅니다. 따라서 요청을 지연시키는 절전 기능을 만들고 싶습니다. 따라서이 함수를 사용하여 다른 요청을 지연시킬 수도 있습니다. 요청을 지연시키는 다른 방법이 있으면 알려주십시오.
어쨌든, 이것은 작동하지 않는 새로운 코드입니다. 요청의 응답은 setTimeout 내에서 익명의 비동기 함수로 반환되지만 슬립 함수 resp에 응답을 반환하는 방법을 모르겠습니다. 초기 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);
}
나는 이미 전역 변수에 응답을 저장하고 수면 함수, 익명 함수 내 콜백 등에서 응답을 저장하는 몇 가지 옵션을 시도했습니다.
Promise.all
접근 방식을 좋아하십시오 . 너무 간단하고 우아합니다!