我有类似的东西。
function a() {
ajax(callback_function);
}
callback_function() {
// done!, called after ajax is finished
}
function b() {
a();
c(); // make sure c is executed AFTER a is finished.
}
function c() {
// called after a()!
}
如何确保在a()完成后调用函数c()?我想我必须使用另一个回调函数,但不确定该怎么做。
编辑
没说清楚。我更喜欢如果我没有在callback_function中调用c(),因为可以在不需要调用c()的情况下调用()。
答案 0 :(得分:1)
您可以从回调函数中调用c()
答案 1 :(得分:1)
您可以返工a
,以便将回调函数作为参数。这样,您可以在需要调用c
之后以及不需要调用它的地方调用它:
function a(callback) {
ajax(callback);
}
function callback_function() { }
function b() {
a(function() {
callback_function();
c();
});
}
function b2() {
a(callback_function);
}
function c() { }
答案 2 :(得分:1)
你可以将所有回调包装成一个匿名函数:
function a(callback) {
ajax(function(){
callback_function();
callback();
});
}
callback_function() {
// done!, called after ajax is finished
}
function b() {
a(c);
// make sure c is executed AFTER a is finished.
}
function c() {
// called after a()!
}
或者您可以在callback_function
注册另一个回调:
function a(callback) {
ajax(function(){
callback_function(callback);
});
}
callback_function(callback) {
// done!, called after ajax is finished
callback();
}
function b() {
a(c);
// make sure c is executed AFTER a is finished.
}
function c() {
// called after a()!
}
更优雅(更好)的方法是将回调绑定到某个自定义事件,例如“ajax-done”,并且在ajax代码成功执行后,您可以触发该特定事件。
如果使用jquery,则event-method非常简单:
function a() {
ajax(function(){
$(window).trigger('ajax-done');
});
}
callback_function() {
// done!, called after ajax is finished
}
function b() {
a();
// make sure c is executed AFTER a is finished.
}
function c() {
// called after a()!
}
$(window).bind('ajax-done',callback_function);
$(window).bind('ajax-done',c);
当然你可以在没有jquery的情况下做同样的事情,但是因为你必须确保你的代码是跨浏览器的,所以它有点麻烦。
答案 3 :(得分:1)
如果您不希望将回叫与直接调用c()
绑定,则有2个选项:
1.将a
更改为:
function a(fn) {
ajax(function() {
callback_function();
if (fn) fn();
});
}
现在你有了:
function b() {
a(c);
}
2.在callback_function结束时添加一个信号:
function callback_function() {
// ...
emit('callback_done', { param1: true, param2, false });
}
function b() {
connect('callback_done', c);
a();
}
答案 4 :(得分:0)
无需创建另一个回调,只需在c
函数
callback
函数
function a() {
ajax(callback_function);
}
callback_function() {
// Do whatever you need with data from ajax
c();
}
function b() {
a();
}
function c() {
// called after a()!
}
答案 5 :(得分:0)
每个ajax调用都有一个名为onComplete
的回调函数,您可以更改它并在其中调用函数c
。
下一个解决方案是使用synchronous
ajax调用。
在c
结束时拨打电话callback_function
。
答案 6 :(得分:0)
如果我已经理解你正在尝试做什么,你可以使用匿名函数来处理这个特殊情况,这意味着你不必修改或复制你的回调函数:
function a() {
ajax(function() {
callback_function();
c();
});
}
function callback_function() {}
function c() {}