如何使用异步函数正确地遍历数组

我有一组 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;

}

不幸的是,我有时会收到“超出最大调用堆栈大小”的错误。有一个更好的方法吗?


HUWWW
浏览 109回答 1
1回答

波斯汪

我之前遇到过这个问题,并设法通过使用异步循环 (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');}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript