Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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_Asynchronous_Callback - Fatal编程技术网

Javascript 为什么我的回调函数最后被调用?

Javascript 为什么我的回调函数最后被调用?,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,我现在真的很难接受这个问题,请参见下面的代码: var getImageFromUrl = function(url, callback) { var img = new Image, data, ret={data: null, pending: true}; img.onError = function() { throw new Error('Cannot load image: "'+url+'"'); } img.onload = function() { var c

我现在真的很难接受这个问题,请参见下面的代码:

var getImageFromUrl = function(url, callback) {
var img = new Image, data, ret={data: null, pending: true};

img.onError = function() {
    throw new Error('Cannot load image: "'+url+'"');
}
img.onload = function() {
    var canvas = document.createElement('canvas');
    document.body.appendChild(canvas);
    canvas.width = img.width;
    canvas.height = img.height;

    var ctx = canvas.getContext('2d');
    ctx.clearRect( 0, 0, canvas.width, canvas.height );
    ctx.drawImage(img, 0, 0);
    // Grab the image as a jpeg encoded in base64, but only the data
    data = canvas.toDataURL('image/jpeg').slice('data:image/jpeg;base64,'.length);
    // Convert the data to binary form
    data = atob(data)
    document.body.removeChild(canvas);

    ret['data'] = data;
    ret['pending'] = false;
    if (typeof callback === 'function') {
        callback(data);
    }
}
img.src = url;

return ret;
}
这是我的号召:

getImageFromUrl('pdfconversion/roundel.jpg', addImage);

因此,基本上,为了让我的方法实现我真正希望它实现的功能(这里没有显示),我需要回调函数,在本例中,在访问getImageFromUrl方法后立即调用“addImage”。此时,调用getImageFromUrl方法,然后在调用“addImage”回调函数之前运行我的其余代码(上面未显示)。我怎样才能让这成为下一个电话?非常感谢您的帮助。

删除回调,然后按顺序调用它:

getImageFromUrl('pdfconversion/roundel.jpg');
addImage();

调用
last
是什么意思?删除
[java]
标记似乎不相关。因此希望按顺序执行回调?然后它将不是回调。回调将在图像加载完成后执行。您无法控制这将需要多长时间。嗯,这是预期的行为,因为您传递的callback-函数在
image
-元素的
onload
-回调中调用,该回调在映像完全加载后被激发。这就是为什么它被称为“回调”函数,它应该在其他事情完成后启动。如果需要其中的image元素,这是唯一的方法,如果不需要,为什么不直接调用
getImageFromUrl
主体中的函数,而不是onload回调?