我有点困惑我使用Fragment
的结果来修改一个全局对象(我不确定一个更好的方法来做到这一点)试图用延迟完成这个。到calltwo()时,应该使用新数据修改全局对象
<?php
function get_external_files(){
wp_enqueue_style('style', 'get_stylesheet_uri()');
}
add_action('wp_enqueue_scripts', 'get_external_files');
callone()
答案 0 :(得分:3)
我在下面提供了一个更简单的实现。
callone()
必须返回延迟或承诺,您可以等待它或将其他操作链接到它,您只需使用$.ajax()
已经返回的承诺而不是创建自己的承诺。
此外,没有理由在这里使用$.when()
,因为当你试图等待并行运行的多个promise时,它实际上只会增加价值,这根本不是你的情况。因此,您可以在已有的个人承诺上使用.then()
处理程序。
此外,在处理异步操作时,您确实不想使用全局变量。您可以链接承诺并通过承诺传递数据。
以下是callone()
的样子:
function callone(requiredData) {
return $.ajax({
type: "POST",
url: 'AB/',
data: requiredData
});
}
function calltwo(...) {
// similar to callone
// returns promise from $.ajax()
}
callone(...).then(function(data) {
// when callone is done, use the id from its result
// and pass that to calltwo
return calltwo(data.id);
}).then(function(data) {
// process result from calltwo here
}, function(err) {
// ajax error here
});
请注意,此代码未创建任何新的Deferred对象。它只是使用已从$.ajax()
返回的承诺。另请注意,它不是使用success:
或error:
处理程序,因为这些也是通过承诺。
另外,请注意,从.then()
处理程序中返回一个promise会自动将其链接到之前的promise中,这样在新返回的promise也被解析之前,前一个promise将无法解析。这可以让你保持链条的运转。
另外,请注意,从异步回调函数返回数据不会将数据返回给原始函数的调用者,因此您尝试从success:
处理程序返回某些内容并未完成任何操作。相反,使用promises并通过promises返回数据,因为它们专门用于将异步数据返回给.then()
处理程序。