gpt4 book ai didi

javascript - 如何最好地在 JavaScript 中重构这组跨多个方法的重复触发调用?

转载 作者:行者123 更新时间:2023-11-28 02:45:54 25 4
gpt4 key购买 nike

这是我的代码:

var criterion = _.extends({},Base);

criterion.dispatcher.on('save',this.saveIt,this); //respond to event save.

criterion.saveIt = function(){
if(this.hasChanged())
this.save({success:this.saveSuccess, error:this.saveError}); //method in Base
else
dispatcher.trigger('done');
};

criterion.saveSuccess = function() {
//do something
dispatcher.trigger('done');
};

criterion.saveError = function() {
//do something
dispatcher.trigger('done');
};

对于 ajax 特定项目,有不少以 dispatcher.trigger('done') 结尾的函数。这用于更新网络应用程序上的进度条 - 它在成功或错误或已处于新状态时从每个元素接收到 done 事件后进行倒计时。由于计数器是确定性的,因此它会根据项目数进行递增计数,并根据收到的done数量进行递减计数。

问题:是否有更好的方法来删除每个函数末尾对 dispatcher.trigger('done') 的重复调用?或者说这是一种必要的罪恶。我们在各种对象中都有这样的代码,只是为了同步“下一步”的执行(可以将其视为“同步障碍”)。

最佳答案

您可以创建一个自动附加调用的方法。

criterion.addProgressMethod = function( methodName, method ) {
criterion[methodName] = function() {
method();
dispatcher.trigger('done');
}
};

// usage

criterion.addProgressMethod( 'saveSuccess', function() {
// do something here
} );

我不确定这是否比您现有的更好,但这是一个想法。

关于javascript - 如何最好地在 JavaScript 中重构这组跨多个方法的重复触发调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11890477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com