【发布时间】:2013-06-22 18:58:38
【问题描述】:
我有一个场景,我希望在特定的第 3 方 js 函数完成执行后执行我的函数。
我无法编辑loadOne 的来源,但是我可以添加/覆盖我的newLoadOne 作为点击监听器。所以我可以代表它执行loadOne,并用它返回的数据执行我的代码。
现在,我的newLoadOne 在loadOne 方法的异步回调返回之前打印console.log。
HTML
<select id="option1">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<select id="option2">
<option>One</option>
<option>Two</option>
<option>Three</option>
</select>
<input id="submit" type="button" value="Submit" />
JavaScript
function loadOne(){
someAsyncXhrMethod(with_its_own_parameters);//its own xhr method with aync callbacks
}
function newLoadOne(){
(function(){loadOne(); console.log('done');}());
}
function optionschanged(){
console.log('options changed');
}
function bEvents(){
$('#option1').change(optionschanged);
$('#option2').change(optionschanged);
$('#submit').bind('click', newLoadOne); //this is where i replace the call to loadOne with my newLoadOne
}
$(document).ready(function () {
console.log('ready');
bEvents();
});
这里是jsFiddle link - 注意: 源代码中的$.ajax 调用是为了解释loadOne 方法有一些异步回调。所以$(document).ajaxComplete 不是答案。
【问题讨论】:
-
不幸的是,如果库的作者没有使这成为可能,那么您将无能为力(除了错误他们以修复他们的错误)。但是为什么不能编辑源代码?
-
这是第三方源代码,我无法访问它。
-
我们需要了解更多关于我认为的原始
loadone作品...看看是否有什么我们可以挂钩... -
@Jivings ajaxComplete 仅在 3rd 方方法使用 jquery 时才有效,在我的情况下它不是。
-
如果主题函数没有返回promise并且asych操作不是jQuery.ajax,那么你就很卡壳了。我并不是说不可能,但在能够提供建议之前需要了解更多。
标签: javascript jquery asynchronous promise