我有下一个目标:
我想要两个函数 - 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()。都。对我来说是艰巨的任务。
答案 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
我希望我帮助过你。如果您有依赖关系并使用资源,请尽量保持同步方式。