在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);
});
}
提前致谢!!
答案 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);
}
);
}