7

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

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

4

2 回答 2

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
   });
}
于 2013-07-17T22:08:55.707 回答
3

我不完全确定我理解您要做什么,但是如果您想在单击处理程序的上下文中使用延迟对象执行回调,您可以从 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);
};
于 2013-07-17T22:19:43.323 回答