मैं नई async सुविधाओं का उपयोग करने की कोशिश कर रहा हूं और मुझे उम्मीद है कि मेरी समस्या को हल करने से भविष्य में दूसरों की मदद मिलेगी। यह मेरा कोड है जो काम कर रहा है:
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
});
}
समस्या यह है, कि मेरी जबकि लूप बहुत तेजी से चलता है और स्क्रिप्ट प्रति सेकंड कई अनुरोध Google एपीआई को भेजती है। इसलिए मैं एक नींद समारोह का निर्माण करना चाहता हूं जो अनुरोध को विलंबित करता है। इस प्रकार मैं इस फ़ंक्शन का उपयोग अन्य अनुरोधों में देरी करने के लिए भी कर सकता हूं। यदि अनुरोध में देरी का कोई और तरीका है, तो कृपया मुझे बताएं।
वैसे भी, यह मेरा नया कोड है जो काम नहीं करता है। रिक्वेस्ट की रिस्पॉन्स सेटटाइमआउट के भीतर अननोन असिंच फंक्शन में वापस आ जाता है, लेकिन मुझे नहीं पता कि मैं स्लीप फंक्शन रिस्पॉन्स के लिए कैसे रिस्पॉन्स लौटा सकता हूं। प्रारंभिक 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
दृष्टिकोण से प्यार करें । इतना सरल और सुरुचिपूर्ण!