Javascript 我可以使用函数封装一行代码吗?
我想知道是否可以用其他代码封装一行代码?我认为我的意图在js示例中变得很清楚。我还想知道这在Java中是否可行Javascript 我可以使用函数封装一行代码吗?,javascript,Javascript,我想知道是否可以用其他代码封装一行代码?我认为我的意图在js示例中变得很清楚。我还想知道这在Java中是否可行 var mainModel = openModel("Model.model"); var tries = 0; var maxtries = 5; var success = false; while(!success) { try { mainModel.packAndcopyModel(); success = true; } catch(err
var mainModel = openModel("Model.model");
var tries = 0;
var maxtries = 5;
var success = false;
while(!success) {
try {
mainModel.packAndcopyModel();
success = true;
} catch(err) {
log('packing failed, trying again; at try '+tries);
tries += 1;
sleep_ms(1000);
}
if(tries === maxtries) {
success = true;
log('ERROR: packing failed, will continue with next action');
}
}
因此,packAndcopyModel()将压缩模型,然后将其复制到另一个位置。我的问题是,这有时会失败,因为windows 7由于硬盘上的流量过大而抛出AccessDenied错误。因此,它应该等待一秒钟,然后再试一次
现在,我可以将上面的代码转换为:
var mainModel = openModel("Model.model");
tryFiveTimes(mainModel.packAndcopyModel())
我的问题是,这个while循环经常出现在我的代码中,这使得它非常不干净。一个函数的另一个优点是,若我决定以不同的方式处理这个错误,我只需要在一个函数中更改代码,而不是在错误实际发生的任何地方
我不希望您为我编写函数tryFiveTimes(),只有关于如何解决问题的提示才能让我感到高兴。如果可用,您可以使用重试包,但是在Java中实现重试类也应该是简单的 最小python示例。(示例代码,可能需要调整才能工作)
仅仅因为传输失败而多次“重新打包”模型似乎是浪费。我会尝试将重试逻辑放在PackagedCopyModel中。哦,是的,xD自己还没有看到它,但是我当然还需要复制部分的胶囊功能。
class Retry:
def __init__(self, backoff, max_times, list_of_errors):
self.backoff = backoff
self.max_times = max_times
self.retryable_errors = list_of_errors
self.wait_time = 0.01
def retry_on_failure(self, fn, args):
try:
fn(**args) # here args is a map
except Exception as e:
if (any(self.retryable_errors.map(
lambda re: instanceOf(e, re))) and
self.max_times > 0):
self.max_times -= 1
sleep(self.wait_time)
self.wait_time *= (2^self.backoff)
self.retry_on_failure(fn, args)
retryObj = new Retry(**config)
retryObj.retry_on_failure(mainModel.packAndcopyModel, {})