Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的异步调用处理_Javascript_Jquery_Asynchronous_Html2canvas - Fatal编程技术网

javascript中的异步调用处理

javascript中的异步调用处理,javascript,jquery,asynchronous,html2canvas,Javascript,Jquery,Asynchronous,Html2canvas,我试图调用一个函数saveBadge(),并获取要在for循环中使用的函数的值。但每次从数组中获取值时,我都要将div标记转换为Image。但每次我得到最后一个值。如何处理异步调用 for(var j=0;j<anarray.length;j++) { var json=JSON.parse(anarray[j]); // adding in badge image alert(anarray[j]); va

我试图调用一个函数saveBadge(),并获取要在for循环中使用的函数的值。但每次从数组中获取值时,我都要将div标记转换为Image。但每次我得到最后一个值。如何处理异步调用

    for(var j=0;j<anarray.length;j++)
    {
        var json=JSON.parse(anarray[j]);
        // adding in badge image
        alert(anarray[j]);

        var imgTem=json['regId']['image'];
        var imgFin=imgTem.replace("dataimage","data:image").replace("base64",";base64,");              


        $("#name").text(json['regId']['fname']+" "+json['regId']['lname']);  // User name
        var imgTem=json['regId']['image'];
        var imgFin=imgTem.replace("dataimage","data:image").replace("base64",";base64,");     
        $("#image").attr("src",imgFin);                                     // User Image
        $("#gender").text(json['regId']['gender']);                         // User Gender

        //QRcode generator
        var qrcode = json['badgeId'];                                       // User QRcode
        var qr = new QRious({
            element: document.getElementById('qrcanvas'),
            value: qrcode,
            background: 'white', // background color
            foreground: 'black', // foreground color
            level: 'L', // Error correction level of the QR code (L, M, Q, H)
            mime: 'image/jpeg', // MIME type used to render the image for the QR code
            size: 120 // Size of the QR code in pixels.
        });         
        //qr.toDataURL("jpeg"); // Generates a base64 encoded data URI for the QR code. 
       savebadge();  
        var bdgImg = localStorage.getItem("bdgImg");

        var qrjson = JSON.parse(anarray[j]);
        qrjson.badgeImg=bdgImg.replace("data:image","dataimage").replace(";base64,","base64");
        anarray[j]=JSON.stringify(qrjson);  
     } // End of for-loop



    toReq();
   });

用于(var j=0;jSave badge之后的代码需要在onrendered中调用。这就是回调和承诺的作用。我用两个票证结束了它,这两个票证有很多关于如何处理异步请求运行代码的选项。承诺和回调是处理代码依赖于异步调用的情况的方法。
function savebadge(){

for(var j=0;j<anarray.length;j++)
{
html2canvas($("#bdg"+j+""), {
    onrendered: function(canvas) {
        theCanvas = canvas;
        var base64img = canvas.toDataURL();
        badgeimg=base64img.replace("png","jpeg");
        alert($("#name").text());
        //console.log("render "+badgeimg);
        localStorage.setItem("bdgImg",badgeimg); 

        var img = $("<img>",{
            "src" : badgeimg,
            "alt" : "badgeimg"
        });
        $("#divimg").append(img);


    }       
});
}}