2016-07-08 117 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