如何重用在一连串的thens之间的函数(承诺相关)

时间:2014-07-11 19:35:35

标签: javascript

我有一个连接几次的简单函数

return config.load()
    .then(function() {
        //first duplicate code block
    })
    .then(function() {
        //the start of my unique block
        return foo.bar()
            .then(function(trace) {
                //unique code
            })
            .then(function(tree) {
                //more unique code
            });
    })
    .then(function() {
        //second duplicate code
    })
    .then(config.save)
    .then(function() {
        //more duplicate for part 2
    })
    .catch(function(e) {
        //more duplicate for part 2
    });

在上面看到的中间“然后”是我在两个不同情况下唯一不同的部分。我正在寻找如何重构它以保持干燥

1 个答案:

答案 0 :(得分:5)

您可以在外面声明它们,并在promise链中引用它们

// Declare reusables
function dupe1(arg1,arg2,...,argN){...}
function dupe2(arg1,arg2,...,argN){...}

// Go about our normal business, with functions replaced with a reference
return config.load()
  .then(dupe1)
  .then(function() {
    //the start of my unique block
    return foo.bar()
    .then(function(trace) {
        //unique code
    })
    .then(function(tree) {
        //more unique code
    });
  })
  .then(dupe2)
  .then(config.save)
  .then(dupe2)
  .catch(dupe2);