0

我有 1 个应用程序使用为 ios 编写的 phone gap 2.5.0。我正在尝试将服务器中的文件下载到我的应用程序。我需要下载很多文件(84 个文件);我使用 1 个循环来下载所有内容。

但是当我使用“for”语句时,它循环太快并且几乎同时下载所有文件,并且某些文件由于超时而无法下载完成。

所以我想要 1 个文件下载完成,然后下一个文件开始下载。

我怎样才能做到这一点?

请帮我!我是垃圾车...

这是我的代码:

var fileTransfer = new FileTransfer();

for (var i = 0; i < anhup.length; i++) {
    console.log("anhup[" + i + "]: " + anhup[i]);
    fileTransfer.download(
        "http://smartphone.thnt.vn/VietGames/GhepTranhTu/IOS/update/"
                + anhup[i], window.rootFS.fullPath + "/" + anhup[i],
        function(entry) {
            sa = entry.fullPath;
            console.log("download complete: " + entry.fullPath);

        }, function(error) {
            console.log("download error source " + error.source);
            console.log("download error target " + error.target);
            console.log("upload error code" + error.code);
        });
}
4

3 回答 3

1

尝试

function download() {
    var i = 0;

    var fileTransfer = new FileTransfer();

    function doDownload(i) {
        fileTransfer.download(
                "http://smartphone.thnt.vn/VietGames/GhepTranhTu/IOS/update/"
                        + anhup[i], window.rootFS.fullPath + "/" + anhup[i],
                function(entry) {
                    sa = entry.fullPath;
                    console.log("download complete: " + entry.fullPath);

                    if (i < anhup.length - 1) {
                        doDownload(i + 1);
                    }

                }, function(error) {
                    console.log("download error source " + error.source);
                    console.log("download error target " + error.target);
                    console.log("upload error code" + error.code);
                });
    }

    doDownload(0)
}
于 2013-04-23T03:22:41.033 回答
1

创建一个函数并继续调用自身,直到对象为空,就像这样。

function loadFile() {
    // no more to load
    if(!anhup.length)
        return;

    var context = anhup.shift();

    fileTransfer.download(url, function(entry) {
        console.log("download complete: " + entry.fullPath);

        loadFile();
    }, function(error) {
        // ...
    });
}
于 2013-04-23T03:25:21.773 回答
0

你不能用“for”循环来做到这一点,你需要在调用'success'回调函数时开始下载下一个文件;最简单的方法是制作'i'全局变量,然后像这样重写你的代码(未经测试!):

var i = 0;
var downloadNext;

var onSuccess = function(entry) {
    sa = entry.fullPath;
    console.log("download complete: " + entry.fullPath);
    i = i + 1;
    if (i < anhup.length) {
       downloadNext();
    }
};

var onFail = function(error) {
        console.log("download error source " + error.source);
        console.log("download error target " + error.target);
        console.log("upload error code" + error.code);
};

downloadNext = function() {
    console.log("anhup[" + i + "]: " + anhup[i]);
    fileTransfer.download(
        "http://smartphone.thnt.vn/VietGames/GhepTranhTu/IOS/update/"
            + anhup[i], window.rootFS.fullPath + "/" + anhup[i], 
         onSuccess,
         onFail
    );
};

// start downloading the first one
downloadNext();
于 2013-04-23T03:29:43.950 回答