我正在尝试跟踪函数调用的返回值:
$('#button').on('click', function(){
console.log( getMessage(3) ); // I'm trying to get this to "hang" until ajax-related stuff is finished below
});
下面的ajaxFetch()
是一个通用的ajax处理程序,它返回预期的ajax延迟对象。我们假设它是一个字符串值:'hello'
。服务器响应是几秒钟。
function getMessage(id){
ajaxFetch(id).done(function(result){
// ... more stuff happening, but not relevant
}).then(function(result){
return (result); // I thought this would return to the click handler
});
}
如何让我的跟踪输出'hello'
?
... console.log()
需要以某种方式设置为promise
,但我很难理解jQuery documentation。
答案 0 :(得分:4)
从中返回promise接口和代码逻辑:
$('#button').on('click', function(){
$.when(getMessage(3)).then(function(result){console.log(result)});
});
function getMessage(id){
return ajaxFetch(id).done(function(result){
// ... more stuff happening, but not relevant
}).then(function(result){
return result; //needed, otherwise it will return the object, not the result
});
}
答案 1 :(得分:3)
我不完全确定我理解你要做什么,但如果你想在click处理程序的上下文中使用deferred对象执行回调,你可以从getMessage返回ajax函数本身。尝试这样的事情:(未经测试)
$('#button').on('click', function(){
getMessage(3).then(function(result) {
// do success callback here
console.log(result); // 'hello'
}, function(result) {
// do fail callback here
});
});
function getMessage(id){
return ajaxFetch(id);
};