摆脱承诺链的好方法是什么?

时间:2016-05-18 10:27:36

标签: javascript ecmascript-6 break chain

我想知道如何在JS中正确破坏承诺链。

在这段代码中,我首先连接到数据库,然后我正在检查集合是否已经有一些数据,如果没有添加它们。不要注意一些actionhero.js代码......这里没关系。

主要问题是:使用throw null打破链是否可行?

mongoose.connect(api.config.mongo.connectionURL, {})
        .then(() => {
            return api.mongo.City.count();
        })
        .then(count => {
            if (count !== 0) {
                console.log(`Amout of cities is ${count}`);
                throw null; // break from chain method. Is it okay ?
            }
            return api.mongo.City.addCities(api.config.mongo.dataPath + '/cities.json');
        })
        .then(cities => {
            console.log("Cities has been added");
            console.log(cities);
            next();
        })
        .catch(err => {
            next(err);
        })

非常感谢!

1 个答案:

答案 0 :(得分:2)

尽管它似乎是一个聪明的技巧,并且会像你期望的那样工作,但我建议不要抛出非错误对象。

如果你抛出一个实际的错误并明确地处理它,那么维护这段代码的其他开发人员会更容易预测。

Promise
  .resolve()
  .then(() => {
    throw new Error('Already in database');
  })
  .catch(err => {
    if (err.message === 'Already in database') {
      // do nothing
    } else {
      next(err);
    }
  });