Javascript 为什么我的deferred.done()在等待AJAX调用时没有得到解决?

Javascript 为什么我的deferred.done()在等待AJAX调用时没有得到解决?,javascript,jquery,ajax,jquery-deferred,Javascript,Jquery,Ajax,Jquery Deferred,我有一段代码: Event = new Event(); // Create a deferred object var dfd = $.Deferred(); // Add handlers to be called when dfd is resolved dfd.done( Event.getEvents( position.coords.latitude, position.coords.longitude ) ).then( function( data ){ //rest

我有一段代码:

Event = new Event();

// Create a deferred object
var dfd = $.Deferred();

// Add handlers to be called when dfd is resolved
dfd.done( Event.getEvents( position.coords.latitude, position.coords.longitude ) ).then( function( data ){
    //rest of the code ..
    console.log("No!");
});
那不是我想要的。不会解析“完成”,也不会触发
then()
。下面是
Event.getEvents
(它在另一个文件中):

我希望在AJAX调用之后触发
console.log(“No!”)
(在博客的第一部分中)。但从我在控制台日志中看到的情况来看,ajax调用是在记录了“这不应该在成功之前被记录”之后执行的。完成的事情永远不会被触发。我不知道为什么

这是我的日志:

events
This shouldn't be logged before success.
success
Object 
2.3322972250333
done
如果我尝试使用
$.when(Event.getEvents()
..,则在“成功之前不应记录此操作”之后立即触发“完成”

在AJAX调用结束后,当我返回承诺时,如何触发延迟对象


谢谢

您的代码非常奇怪:您正试图将
getEvents
函数的结果传递给
$。当
(它应该接受jQuery延迟对象),但是
getEvents
根本没有返回语句

$。当
得到未定义的
并且实际上没有什么事可做时。我想您的
getEvents
函数可能会从ajax调用返回如下结果:

this.getEvents = function( lat, lng )
{
    // ... code
    return $.ajax({
       // ....
    });
}
我认为这可能只是解决方案的一部分,但我相信这是一个良好的开端

接下来,你为什么会这样想:

console.log("This shouldn't be logged before success.");
成功之前不能执行吗?您启动了一个异步调用,下一个语句是
控制台。log
。JS是单线程的,ajax调用不可能在此
日志
调用之前完成工作。这没有意义

接下来,下面的代码是什么

d.resolve =  ....
这不是应该的吗

d.resolve ( // ... );

可能重复Thank but return$。AJAX是我试图避免的,因为成功方法中有一些逻辑。我只想返回过滤后的结果。执行return$.AJAX是否是使用when/deferred的唯一方法?
d.resolve ( // ... );