gpt4 book ai didi

jquery - 为什么我们应该返回 deferred.promise()

转载 作者:行者123 更新时间:2023-12-01 05:34:45 24 4
gpt4 key购买 nike

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 is undefined

它应该在 line#1line#2 返回。为什么我们需要line#3以及line#3有什么用?

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

最佳答案

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 的回调中返回任何内容,因为 ajax 请求中的上下文是“窗口”。您可以尝试以下操作:

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
}

这是对您的示例的模拟。

关于jquery - 为什么我们应该返回 deferred.promise(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34716691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com