嵌套for循环与内部函数

时间:2015-10-05 11:14:37

标签: javascript cordova

在javascript For循环中,它的工作速度很快,内部函数不会被调用。我正在尝试使用cordova将图像存储在数据库中。在我的代码循环工作快速完成但我没有得到任何base64图像。

for(var i = 0; i < pages.length; i++)
{
    var cat_img = res.Catalogue[0].Catalogue_img;
    var catalogue_image_id = cat_img[i].catalogue_image_id;
    var catalogue_image = cat_img[i].catalogue_image;

    getBase64FromImage(catalogue_image,function (baseData64) {
        console.log("baseData64===="+baseData64);
        insertPageData (catalogue_image, catalogue_image_id);
     },function (error) {
        console.log("error====="+error);
    });
}  

提前致谢!!

1 个答案:

答案 0 :(得分:1)

你的回调&#34;功能(baseData64)&#34;只有在下载图像并转换为base64时才会执行。那时,&#34; calalogue_image&#34;的价值和&#34; catalogue_image_id&#34;将包含循环中最后一个元素的值 - 使用&#34; i = pages.length&#34;

也就是说,即使在下载第一张图像之前,你的for循环也可能完成。

实际上我认为有效的行为是你应该只看到最后一张图片,其中&#34; i = pages.length&#34;在数据库中。

试试这个

var processImage = function (cImg,cImgId){
    var catalogueImage = cImg;
    var catalogueImageId = cImgId;
    return function (baseData64) {
        console.log("baseData64===="+baseData64);
        insertPageData (catalogueImage, catalogueImageId);
    }
}

for(var i = 0; i < pages.length; i++)
{
    var cat_img = res.Catalogue[0].Catalogue_img;
    var catalogue_image_id = cat_img[i].catalogue_image_id;
    var catalogue_image = cat_img[i].catalogue_image;
    getBase64FromImage(catalogue_image, 
            processImage(catalogue_image, catalogue_image_id) ,
            function (error) {
                console.log("error====="+error);
            }
    );
}