Jquery 我们为什么要延期返回

Jquery 我们为什么要延期返回,jquery,Jquery,在上面的代码中,我们为什么要返回deferred.promise()?假设删除第#3行,则会出现如下错误: TypeError:承诺未定义 它应该返回到第1行或第2行。为什么我们需要第三行第三行有什么用 如果在第1行或第2行正确返回,那么第3行有什么用 不要在$.ajax的回调中返回任何内容,因为在ajax请求中上下文是“窗口”。您可以尝试以下操作: function process() { var deferred = $.Deferred(); var url = "htt

在上面的代码中,我们为什么要返回
deferred.promise()
?假设删除第#3行,则会出现如下错误:

TypeError:承诺未定义

它应该返回到
第1行
第2行
。为什么我们需要
第三行
第三行有什么用

如果在第1行或第2行正确返回,那么第3行有什么用

不要在$.ajax的回调中返回任何内容,因为在ajax请求中上下文是“窗口”。您可以尝试以下操作:

function process() {
    var deferred = $.Deferred();
    var url = "https://maps.googleapis.com/maps/api/geocode/json";
    $.ajax({ 
        url: url,
        data: {},
        success: function(data){
            deferred.resolve(); // line:1
        },
        error: function(data){
            deferred.reject(); // line:2
         }
    });
    return  deferred; // line:3
}
这是对您的示例的模拟

function process() {
    var deferred = $.Deferred();
    var url = "https://maps.googleapis.com/maps/api/geocode/json";
    $.ajax({ 
        url: url,
        data: {},
        success: function(data){
            deferred.resolve(); // line:1
        },
        error: function(data){
            deferred.reject(); // line:2
         }
    });
    return  deferred; // line:3
}
function sync(){
     var promise = process();
     promise.done(function() {
         alert('done.');
     });
     promise.fail(function() {
        alert('fail.');
     });
}
function process() {
     var deferred = $.Deferred();
     var url = "https://maps.googleapis.com/maps/api/geocode/json";
     setTimeout(function(){
        if(true){
            deferred.resolve();  
        }
     },3000);
     return  deferred; // line:3
}