如何使用异步函数正确地遍历数组
How to properly iterate through array using async functions
我有一组 URL,我必须使用 JS / Cordova 异步函数下载它们。我当前的实现看起来像这样(简化):
var urls = [ ...... many many ...... ]
var arrayPointer = 0;
downloadData();
function downloadData() {
if(arrayPointer >= urls.length) {
do_something_else();
return false
}
downloadURL(urls[arrayPointer++],successDownloadCallback,failDownloadCallback);
return false;
}
function failDownloadCallback() {
logError();
downloadData();
return false;
}
function successDownloadCallback(data) {
saveDataToFile(data,saveSuccessCallback,saveFailCallback);
return false;
}
function saveFailCallback() {
logError();
downloadData();
return false;
}
function saveSuccessCallback() {
downloadData();
return false;
}
不幸的是,我有时会收到“超出最大调用堆栈大小”错误。有更好的方法吗?
我以前遇到过这个问题,并设法通过使用异步循环 (for) 解决了这个问题
const downloadAllfiles = async (arr) => {
for(const x of arr) {
const file = await downloadURL(x.path);
await saveFile(file);
}
console.log('done with all files');
}
我有一组 URL,我必须使用 JS / Cordova 异步函数下载它们。我当前的实现看起来像这样(简化):
var urls = [ ...... many many ...... ]
var arrayPointer = 0;
downloadData();
function downloadData() {
if(arrayPointer >= urls.length) {
do_something_else();
return false
}
downloadURL(urls[arrayPointer++],successDownloadCallback,failDownloadCallback);
return false;
}
function failDownloadCallback() {
logError();
downloadData();
return false;
}
function successDownloadCallback(data) {
saveDataToFile(data,saveSuccessCallback,saveFailCallback);
return false;
}
function saveFailCallback() {
logError();
downloadData();
return false;
}
function saveSuccessCallback() {
downloadData();
return false;
}
不幸的是,我有时会收到“超出最大调用堆栈大小”错误。有更好的方法吗?
我以前遇到过这个问题,并设法通过使用异步循环 (for) 解决了这个问题
const downloadAllfiles = async (arr) => {
for(const x of arr) {
const file = await downloadURL(x.path);
await saveFile(file);
}
console.log('done with all files');
}