2016-07-08 84 views
0

与dockerode(泊坞窗模块)工作,我需要实现以下工作流程:从故障中恢复与承诺

  1. 创建容器
  2. 如果创建失败,拉容器,然后创建容器
  3. 运行容器

所以它看起来大致是:

docker.createContainer() 
    .catch(function (e) { 
    return docker.pull() 
     .then(function() { return docker.createContainer() }; 
    }).then(function(o) { o.start(); }); 

这不是非常干燥。有什么方法可以清理这个?

+0

你在哪里重复自己?将'docker.createContainer'放在一个额外的函数中可能会更加冗长。 – Bergi

回答

2

有什么不干的呢? - 唯一机将使用ES6箭头功能:

docker.createContainer() 
    .catch(e => docker.pull().then(() => docker.createContainer())) 
    .then(o => o.start()); 

这里唯一的重复是在原始问题的表达,我不认为可以进行机。

+0

它不是DRY,因为我重复了一次对createContainer的调用,但也许它不能更简洁地编写。 – ekkis

+0

它完全符合您所需的工作流程,我认为这是您所期望的。你能形容它而不重复自己吗? – jib

+0

是啊...我想这是不能做到的。我所做的是重新编写逻辑以检查容器是否已经存在,然后不尝试创建。我会标记你回答关闭这个问题,如果你说简单,我的原始表达不能干燥 – ekkis