混合了sync和async javascript/jquery,并在最后获得了一个成功函数
Mixing sync and async javascript/jquery and getting a success function at the end
想知道这个问题的最佳解决方案是什么,而且这不是我实际的代码结构或名称,而是说明这个问题的最简单方法。我有一个函数,它纯粹用于执行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 Promises的文章,我不确定它们在这种情况下是否会有所帮助。
编辑
所以我的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:
function load(template) {
return $.get('myFile.php', data, function(result) {
$('#container').html(result);
});
}
然后,在您的代码中,您可以使用when
then
在加载完成后执行代码(如果适用):
var xhr;
/* ... */
if(something){
xhr = load(template);
}
/* ... */
if(xhr){
$.when(xhr).then(doSomething);
} else {
doSomething();
}
事实上,这可以通过以下事实来简化:传递给when
的非延迟对象(显然包括未定义的对象)将立即执行then
并消除if:
$.when(xhr).then(doSomething);
如果xhr
未定义,则when
将立即解析,导致then
立即执行。
相关文章:
- 为什么我使用javascript获得了一个无限的for循环
- 在Ionic中获得了未定义的输入值
- 在Javascript中截断一个字符串,混淆了最后两个测试字符串
- Threejs-你从使用buffergometry中获得了多少
- 从AJAX变量到PHP变量,成功地获得了正确的代码
- 雷格斯只参加了最后一场比赛
- 检查是否单击了最后一个元素
- 这个 Web worker 代码是多线程的吗,我是否获得了什么
- 尽管成功传输了 json,但我的 Jquery.ajax 方法在响应中获得了错误状态
- NodeJs:fs.appendFile 函数似乎错过了最后一个给定的字符串
- 混合了sync和async javascript/jquery,并在最后获得了一个成功函数
- 在React.js中创建文件上传时获得了一个奇怪的意外令牌
- Aurelia在视图中获得了价值约定结果
- 使用forEach通过obj数组获得了未定义的循环
- 通过将表达式移动到' if '条件子句,uglifyjs获得了什么?
- 使用getElementsByClassName似乎获得了太多的元素
- Facebook从用户那里获得了访问其他数据的重新许可
- 获得“五月最后一个星期一”的最佳途径
- 我正在写一个代码来去掉单词中的最后一个元音,但它删除了最后一个字母.我哪里错了
- ESRI Javascript API在一定程度上获得了功能