为异步函数进行回调

时间:2015-01-29 00:40:02

标签: javascript ajax asynchronous callback

我可以编写一个回调函数来暂停一个脚本的执行,直到另一个脚本完成。我找到了here

dosomething(4, function () {
    console.log("finished loop");
});


function dosomething(delay, callback) {

    for (var i = 0; i < 100; i++) {
        $("body").append(i + "<br>");
    }
    alert("done");
    if (typeof callback == "function") callback();

}

FIDDLE

但是,这不适用于异步的函数。我认为这就是原因。

doAjax(4, function () {
    console.log("finished ajax");
});

function doAjax(delay, callback) {
    $.ajax({
        type: "post",
        url: "/echo/html/",
        data: {
            html: "some content",
            delay: 4
        },
        dataType: 'html',
        success: function () {
            console.log("ajax done");
        }
    });

    if (typeof callback == "function") callback();
}

FIDDLE

我知道如何将自己的回调用于异步请求是有点傻,因为jQuery内置了它们,我只使用了一个,但我想知道它是如何实现的。它是否像编写整个promise库一样复杂?

1 个答案:

答案 0 :(得分:1)

请求完成后,您不会调用回调。


...
//HERE!
success: function(data){
  if (typeof callback == "function") callback(null, data);
},
error: callback
...
//NOT BELOW