对于循环等待:jquery

时间:2013-12-04 06:21:56

标签: jquery fileapi

    for (var i in ids) {
       alert("image" + i + ".png");
       setTimeout(function () {
           (function () {
               fs.root.getFile("image" + i + ".png", {
                   create: true
               }, function (fileEntry) {
                   alert("fileimage" + i + ".png");
                   console.log(fileEntry);
                   fileEntry.createWriter(function (fileWriter) {

                       fileWriter.onwriteend = function (e) {
                           console.log("image successfully written to filesystem.");

                       };

                       var blob = new Blob([ids[i]]);
                       fileWriter.write(blob);
                   }, errorHandler);
               }, errorHandler);
           })(i)
       }, i * 1000);

   }

我正在尝试将多个图像保存到文件api。 ids数组有多个图像作为blob。这里我的问题是,第一个警报,即“警报(”图像“+ i +”。png“);”被触发4次,然后第一次触发第二次警报。我怎样才能让它一个接一个地触发?

请帮忙, 感谢

2 个答案:

答案 0 :(得分:0)

setTimeout不会停止执行并等待函数完成。它会立即返回。然后在定义的毫秒后调用传递给它的函数。

答案 1 :(得分:0)

for (var i in ids) {
   alert("image" + i + ".png");

这会一个接一个地触发您的4个警报,因为它处于循环中并且不关心图像是否加载。

当fs.root.getFile结束并触发回调时,似乎会触发第二个警报。

您可以尝试以下

for (var i in ids) {
   setTimeout(function () {
       // alert("image" + i + ".png"); // here will be delayed also
       (function () {
           alert("image" + i + ".png");
           fs.root.getFile("image" + i + ".png", {