如何从jQuery中的链式延迟返回值?

时间:2013-07-17 22:04:15

标签: jquery jquery-deferred

我正在尝试跟踪函数调用的返回值:

$('#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

2 个答案:

答案 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);
};