JS - הרצת כמה בקשות לגוגל דרייב במקביל
-
אני צריך להוריד כמה קבצים מגוגל דרייב (באמצעות קוד) במהירות המירבית שניתן,
לשם כך אני מנסה להוריד אותם במקביל
הקוד שלי נראה משהו כזה:async function getAllFiles (user, fileIds) { let promises = []; for (let fileId of fileIds) { promises.push(getFile(fileId, user) .then(...) .catch(...)); } let start = Date.now(); await Promise.all(promises); console.log(`Got contents of all files (${(Date.now() - start) / 1000} seconds)`); } function getFile (fileId, user) { return new Promise(async (resolve, reject) => { let start = Date.now(); console.log(`starting to request ${fileId}...`); let stream = (await drive.files.get({ fileId: fileId, alt: 'media' }, { responseType: 'stream' })).data; let chunks = []; stream.on('data', (chunk) => { chunks.push(chunk); }); stream.on('end', () => { resolve(Buffer.concat(chunks).toString()); console.log(`Got contents of ${fileId} (${(Date.now() - start) / 1000} seconds)`); }); stream.on('error', (error) => { reject(error); }); }); }
הייתי מצפה לראות פלט משהו כזה:
starting to request XXXX... starting to request XXXX... starting to request XXXX... starting to request XXXX... starting to request XXXX... Got file contents of XXXX (1.44 seconds) Got file contents of XXXX (1.538 seconds) Got file contents of XXXX (1.542 seconds) Got file contents of XXXX (1.692 seconds) Got file contents of XXXX (2.013 seconds)
במקום זה, מה שקורה הוא שהבקשה הראשונה תמיד חוזרת לפני ששאר הבקשות מתחילות.
דוגמה אמיתית:
starting to request 16C1bmOIBY0w1p1N5_xzibFxOeftTTAAn... Got file contents of 16C1bmOIBY0w1p1N5_xzibFxOeftTTAAn (2.538 seconds) starting to request 1275GoJZ_fWV0ixQYkeD1N2JvgaKsU6uc... starting to request 16-ylnBuzbq7j1knIAKpiWCiYXrJwPinf... starting to request 1Hj2O9Z1gom3AYIVGEXeo3rEa9_Lez6IQ... starting to request 1gm1M1leAz_SeuEPOq5ST1V6t3DzbJM_R... starting to request 1HfPSwA9Cn_-aHHVuTiklOPICDB9Kwqeq... Got file contents of 1Hj2O9Z1gom3AYIVGEXeo3rEa9_Lez6IQ (1.44 seconds) Got file contents of 1275GoJZ_fWV0ixQYkeD1N2JvgaKsU6uc (1.538 seconds) Got file contents of 1HfPSwA9Cn_-aHHVuTiklOPICDB9Kwqeq (1.542 seconds) Got file contents of 1gm1M1leAz_SeuEPOq5ST1V6t3DzbJM_R (1.692 seconds) Got file contents of 16-ylnBuzbq7j1knIAKpiWCiYXrJwPinf (2.013 seconds) Got all file contents (4.66 seconds)
וזה תמיד מה שקורה בלי יוצא מן הכלל
מה פשר הדבר ומה הפתרון?