混合使用同步和异步javascript/jquery,并在最后获得一个成功函数

混合使用同步和异步javascript/jquery,并在最后获得一个成功函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,想知道这个问题的最佳解决方案是什么,这也不是我实际的代码结构或名称,而是说明问题的最简单方法。 我有一个函数,它纯粹用于执行ajax调用并用jquery加载模板 function load(template) { $('#container').load(template, data, function() { // complete code here }); } 关注$.load()中的第三个参数,即在请求完成时运行的回调函数 现在我在另一个包装器函数中有了

想知道这个问题的最佳解决方案是什么,这也不是我实际的代码结构或名称,而是说明问题的最简单方法。 我有一个函数,它纯粹用于执行ajax调用并用jquery加载模板

function load(template) {
    $('#container').load(template, data, function() {
       // complete code here
    }); 
}
关注$.load()中的第三个参数,即在请求完成时运行的回调函数

现在我在另一个包装器函数中有了load()函数:

function processTask(variable) {
    load(variable);
}
我的问题是,在ajax加载完成后,我需要一些代码来运行,但是,随着我的应用程序的增长,我的包装函数
processTask
可能会调用ajax
load
,也可能不会调用,因此我无法在完整的回调中执行必需的代码

我是将$.load()更改为执行同步还是只是更好地管理代码,以便在调用$.load()时,它会将所需代码放入回调中,如果不是,它会将代码放在需要的地方

我已经读过javascript承诺,我不确定它们在这种情况下是否会有所帮助

编辑

因此,我的
processTask
是一个对象方法

function classObj(name, fn) {
    this.name = name;
    this.processTask = fn;
    this.load = function(template) {
        $('#container').load(template, data, function() {
           // complete code here
        });
    }
}
在这种情况下,我会这样做:

var task = new classObj('taskName', function() {  
    this.load('myFile.php'); 
    // Or another function and not load() based on whats needed in the task. 
});

基本上,我有一个对象,我可以随意添加自定义方法,并且可以轻松地动态调用它们,直到现在它们始终加载文件。

首先,更改
load
函数以从
get
(或
ajax
)返回xhr:

然后,在代码中,您可以使用
然后
在加载完成后执行代码(如果适用):

var xhr;

/* ... */

if(something){
     xhr = load(template);
}

/* ... */

if(xhr){
    $.when(xhr).then(doSomething);
} else {
    doSomething();
}
事实上,这可以通过以下事实来简化:当(显然包括未定义)传递给
的非延迟对象将立即执行
,然后
,并消除if:

$.when(xhr).then(doSomething);

如果未定义
xhr
,则
将在
时立即解析,从而导致
然后
立即执行。

首先,更改
加载
函数以从
获取
(或
ajax
)返回xhr:

然后,在代码中,您可以使用
然后
在加载完成后执行代码(如果适用):

var xhr;

/* ... */

if(something){
     xhr = load(template);
}

/* ... */

if(xhr){
    $.when(xhr).then(doSomething);
} else {
    doSomething();
}
事实上,这可以通过以下事实来简化:当
(显然包括未定义)传递给
的非延迟对象将立即执行
,然后
,并消除if:

$.when(xhr).then(doSomething);

如果
xhr
未定义,则
将在
时立即解析,导致
然后
立即执行。

“processTask可能调用或可能不调用ajax加载,因此我无法在完整回调中执行必需的代码”可以在“可能调用或可能不调用ajax加载”处包含
processTask
的逻辑在问题?
中,在上下文中我这样做:
。。。您定义的加载函数不接受任何参数。。。你发布的代码很混乱。
this.name
this.processTask
对问题的意义(如果有的话)是什么?您能否将代码简化为您遇到问题的部分,并至少尝试显示流程逻辑。。。添加“或另一个函数”这样的注释真的无助于为混乱的代码道歉,我的实际代码要复杂得多,并且对象有很多层,因此我无法简单地发布它的示例。“processTask可能调用或可能不调用ajax加载,因此我无法在完整回调中执行必需的代码”可以将
processTask
的逻辑包含在问题的“可能调用或可能不调用ajax加载”
中,在上下文中我这样做:
。。。您定义的加载函数不接受任何参数。。。你发布的代码很混乱。
this.name
this.processTask
对问题的意义(如果有的话)是什么?您能否将代码简化为您遇到问题的部分,并至少尝试显示流程逻辑。。。添加“或其他函数”这样的注释真的无助于为代码的混乱道歉,我的实际代码要复杂得多,而且对象有很多层,所以我不能简单地发布一个示例。@guest271314这是一个很好的观点
load
需要更改为返回xhr的内容,如
get
ajax
。答案更新。@guest271314好的观点
load
需要更改为返回xhr的内容,如
get
ajax
。答案已更新。