L0j*_*j1k -1 javascript callback settimeout
阿罗哈.这是我潜伏之后的第一个问题.我为这个问题的详细但直接的形式道歉 - 以及对可接受的答案的限制 - 但我在这里做出贡献.我有一个问题,其他问题(例如如何避免在Node.js中的异步函数的长嵌套或Javascript中的链式回调可读性?)不满意我的回答.
我想执行几个Javascript回调,以便我有一个接一个发生的四个动作的序列.这是来源:
var self = this;
fade(div, fadeIn, -20, function() {
load(unload, dataOut, -10, function() {
load(self, dataIn, 10, function() {
fade(div, fadeOut, 20),0);
unload = self;}
);}
);}
);
Run Code Online (Sandbox Code Playgroud)
除了内部语义细节之外,load()和fade()函数非常相似,它们看起来与此类似:
function load(menuCategory, data, step, callback) {
menuCategory.parentNode.style.width = data+"px";
data += step;
if(dataIn <= data && data <= dataOut) {
setTimeout(function() { load(menuCategory,data,step,callback) }, 15);
} else if(callback && (typeof(callback) == 'function')) {
callback();}
}
Run Code Online (Sandbox Code Playgroud)
我有几个问题与这个混乱有关,但首先让我给你我不寻找的答案.使用jQuery的答案是不可接受的.使用其他计时或"同步"框架或模块的答案是不可接受的.质疑阻止执行的原因的答案是不可接受的.使用Javascript以外的语言的答案是不可接受的.非抽象答案是可以接受的,但最终的解决方案需要尽可能抽象,这意味着答案必须能够对各种相似但略有不同的行为采取行动.
这是我的主要问题:是否有一个函数/对象可以用来顺序应用这些操作,以减少这里的回调?换句话说,如果对象/函数能够同步执行每个动作,因为它是通过它单独迭代(即传递给它),对象会是什么样子?
次要问题:是否有人知道这个回调业务在其他语言中看起来像goto()多少?意思是,这种回调嵌套对我来说感觉非常尴尬和不优雅.是否有开发或已经开发的Javascript语言结构可以减少这种疯狂的业务?回调嵌套是一个最难遵循的逻辑流程.这感觉很尴尬.
我的目标是一个紧凑,优雅,有吸引力的本土Javascript对象/函数 - 我可以在for()循环或等效函数中调用 - 按顺序对每个动作应用这些操作.如果您已经读过这篇文章,我想感谢您的时间和考虑.:)
使用
setTimeout(func(),0)以便同步执行
否.可func()用于同步执行,也可setTimeout(func, 0)用于排队执行(使其异步).
是
setTimeout(func[…],0)"最优雅"的方式把这个动作到对所提供的网页对象执行队列?换句话说,是否有一种"更优雅"的方式来阻止执行(即按顺序执行这些操作)?
是的,这是标准方法.但是,这并不能阻止执行,并没有任何与测序.如果执行是同步的,只需执行它,如果不是,你将不得不处理回调和排队新任务没有帮助.
是否有人知道这个回调业务在其他语言中看起来像goto()多少?意思是,这种回调嵌套对我来说感觉非常尴尬和不优雅.是否有开发或已经开发的Javascript语言结构可以减少这种疯狂的业务?
不,我不知道其他语言,但afaik goto是一个同步的控制流结构语句,因为它不处理异步操作.
但是,没有,没有JavaScript语言结构("语法糖")可以帮助我们绕过延续传递风格及其回调地狱.
是否有一个函数/对象我可以用来顺序地应用这些动作,以减少在这里发生的回调?换句话说,如果对象/函数能够同步执行每个动作,因为它是通过它单独迭代(即传递给它),对象会是什么样子?
我的目标是一个紧凑,优雅,有吸引力的本土Javascript对象/函数 - 我可以在for()循环或等效函数中调用 - 按顺序对每个动作应用这些操作.
再次,您想要"顺序"而不是"同步":-)是的,有[手动编码/自行开发]解决方案,可以更轻松地处理回调.至于那些回调组织库你提到不能满足你,我建议你寻找到了非常优雅和有吸引力的Promise阿比和递延对象(见期货和承诺的概念).
| 归档时间: |
|
| 查看次数: |
1721 次 |
| 最近记录: |