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行,那么我会收到如下错误:
TypeError:promise未定义
应该在line#1
或line#2
返回。为什么我们需要line#3
以及第3行的用途是什么?
如果它在第1行或第2行正确返回那么第3行的用途是什么 see the code here
答案 0 :(得分: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
}
在$ .ajax的回调中不返回任何内容,因为上下文是" window"在ajax 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
}
这是对你的例子的模拟。