可以在 $.when().done() 中使用带有 ajax 调用的函数吗? [复制]

Posted

技术标签:

【中文标题】可以在 $.when().done() 中使用带有 ajax 调用的函数吗? [复制]【英文标题】:Can a function with an ajax call be used in $.when().done()? [duplicate] 【发布时间】:2017-10-13 09:42:39 【问题描述】:

我不确定我是否完全遵循 deferred、promise 和 $.when() 的工作方式。我已经阅读了https://api.jquery.com/jquery.when/,但我很好奇是否可以在$.when() 内部使用带有ajax 调用的函数。

我在文档中看到了这个例子:

$.when( $.ajax( "test.aspx" ) ).then(function( data, textStatus, jqXHR ) 
  alert( jqXHR.status ); // Alerts 200
);

这也是一种可接受的方法吗?

$.when( $.ajax( anotherFunction() ) ).done(
//on completion of the ajax call inside "anotherFunction()" do something here.
);

anotherFunction()$.ajax...do some ajax stuff here.

我正在查看的具体案例是加载可用仪表板的列表,然后在前端填充列表后,从列表中捕获特定仪表板并为其运行加载函数。

我发现它不会中断并且会运行(也许?),但我不知道这是否是编码它的正确方法,或者它是否只是不工作而不是同时中断。

感谢您对此的任何建议和专业知识!

-杰夫

【问题讨论】:

$.when 可用于进行单个 ajax 调用......当需要的数据可用时,只需在第一个回调中进行第二次调用 【参考方案1】:

[...] 如果可以在 $.when() 中使用带有 ajax 调用的函数。

如果您跳过周围的$.ajax 并且函数本身返回$.ajax-调用,则您的示例将起作用。如果您传递给$.when 的不是延迟的(在您的情况下,函数返回未定义),它将立即解决,我认为这不是您想要的。此外,当您只有一个 Deferred 时,$.when 毫无意义。如果您的函数将返回$.ajax,您可以执行anotherFunction().done(...) 之类的操作。

我正在查看的具体案例是加载可用仪表板列表,然后在前端填充列表后

确实,这就是 $.when 背后的想法:等待多个 Deferred 完成。您可以将它们作为参数传递,例如

let d1 = $.ajax(...);
let d2 = $.ajax(...);

$.when(d1, d2).done(...)

但如果你只有一个 ajax 调用,你就不需要$.when

【讨论】:

但 OP 询问的是依赖 ajax 调用,而不是串行

以上是关于可以在 $.when().done() 中使用带有 ajax 调用的函数吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

jquery $.when() .then() 和 .done() 之间的区别

JQuery when() done() then()

jquery.when done 不起作用:它立即执行[关闭]

$.when().done().then()的用法

jq的$.when().done()的使用, 同时调用多个ajax 渲染到页面html上

html 加载外部GeoJSON(Promises):. when()和.done()