javascript - jQuery 延迟的怪异

标签 javascript jquery asynchronous jquery-deferred

我正在编写一个实现延迟的小脚本,并遇到了这一小段代码,该代码的行为与我期望的 Javascript 不同。

var dfd = $.Deferred()
  , view  = $.get("filename.tmpl");

$.get("filename.json")
  .always(function (model) {
    dfd.resolve(model);
  });

$.when(view, dfd)
  .done(function (view, model) {
    // do stuff with view - even if there is no model
  });

这工作得很好,但是当我重构它时它就停止工作了:

var dfd = $.Deferred()
  , view  = $.get("filename.tmpl");

$.get("filename.json").always(dfd.resolve);

$.when(view, dfd)
  .done(function (view, model) {
    // do stuff with view - even if there is no model
  });

我看不出有任何理由认为这不起作用。该函数期望第一个参数是模型或未定义。

最佳答案

当你这样做时:

$.get("filename.json").always(dfd.resolve);

而不是这个:

$.get("filename.json")
  .always(function (model) {
    dfd.resolve(model);
});

您将获得一个不同的对象作为 resolve() 方法的 this 指针传递。第二个将在 dfd 上下文中调用它。第一个将把它称为从 $.get() 返回的延迟对象的上下文,这是不同的。

重要的是要记住,在传递回调时,dfd.resolve 只是获取指向该方法的指针。它不会设置调用 resolve 的上下文。这是在 .always() 方法内部设置的。

关于javascript - jQuery 延迟的怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12309822/

相关文章:

javascript - 全屏标题图片

javascript - JQuery $.ajax 跨域请求中未发送自定义 header

swift - 进度条不异步变化

javascript - Div 未显示,包含源

php - 我如何使用 php 将我的记录集填充到我的 javascript 中

php - 在同一页面中将 PHP 值赋予 Javascript

javascript - 选择一个 id 包含 '

javascript - 如何在另一个下拉列表上创建 onchange 下拉菜单

java - 为什么异步线程不能同时修改 ArrayList?

node.js - 在插入数据库之前等待验证(服务器端)完成