2016-01-11 72 views
2
function sync(){ 
    var timer; 
    $('#result').html('waiting…'); 
    var promise = process(); 
    promise.done(function(a) { 
     $('#result').html('done.'+a); 
    }); 
    promise.fail(function(e) { 
     $('#result').html('fail.'+e); 
    }); 
} 

function process() { 
    var deferred = $.Deferred(); 
    var url = "https://maps.googleapis.com/maps/api/geocode/json"; 
    $.ajax({ 
     url: url, 
     data: {}, 
     success: function(data){ 
      return deferred.resolve(5); // line:1 
     }, 
     error: function(data){ 
      return deferred.reject(0); // line:2 
     } 
    }); 
    return deferred.promise(); // line:3 
} 

爲什麼要在上面的代碼中返回deferred.promise()?假設如果我刪除線#3,然後我得到這樣一個錯誤:我們爲什麼要返回deferred.promise()

TypeError: promise is undefined

應該在line#1line#2返回。爲什麼我們需要line#3以及第3行的用途是什麼?

if it is return properly at line#1 or Line#2 then What is the use of line#3 see the code here

回答

0
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 
} 

因爲上下文是「窗口」內阿賈克斯request.you可以試試這個沒有在$就回調返回任何東西:

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 
} 

這就是你們的榜樣的模擬。