如何在特定条件下正确回调?

时间:2014-10-29 06:59:32

标签: javascript jquery callback

我有下一个目标:

我想要两个函数 - Start()和End()。第一个函数在MyFunc()的开始处运行,第二个函数在MyFunc()的结尾处运行。

,当Start()没有完成时,End()不应该运行。

现在我写了下一段代码:

function MyFunc(OnMyFuncReady) {
    Start();
    // do something
    OnMyFuncReady();
}

function Start() {
    // start specific actions
}

function End() {
    // end specific actions
}

MyFunc(function() {
    End();
});

但Start()与End()异步运行。我怎么解决这个问题?

Update1:​​我检查运行的函数的顺序,发现一切正常,但在Start()中我使用jQuery animate函数,它是异步运行的......

更新2:现在我遇到了下一个问题: 我想在Start()(使用jQuery animate())和MyFunc()完成时运行End()。都。对我来说是艰巨的任务。

1 个答案:

答案 0 :(得分:1)

我看到他们的方式是两个:

首先等到你没有收到Start()的任何回复然后继续。完成所有操作后,将End函数作为参数传递。不幸的是,你应该以某种方式分开开始/结束的bahviour。这背后的原因是你需要验证开始是否已经完成。你不应该使用End(release)函数来解决这类问题。

第二种方法是使用值创建变量。一旦您分配了Start,您就会知道发生了什么。但是,如果你的开始以某种方式失败,你可能不应该继续。一旦完成Start,就为该变量赋值null。之后你应该检查它是否为NULL并在最后传递release函数。

一个很好的例子是Jerry Cain的斯坦福大学课程,请看这里:https://www.youtube.com/watch?v=Yr1YnOVG-4g&feature=PlayList&p=9D558D49CA734A02&index=6

我希望我帮助过你。如果您有依赖关系并使用资源,请尽量保持同步方式。