Javascript 我可以使用函数封装一行代码吗?

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

我想知道是否可以用其他代码封装一行代码?我认为我的意图在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) {
        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, {})