如何在nodeJS Q promise-chain中释放资源并返回promise?

时间:2016-02-08 21:11:25

标签: node.js promise q

承诺和新的承诺Q值。

我想调用一个抽象底层资源的方法。该方法将打开资源进行一些处理然后关闭资源。

这样的事情:

module.exports = function fetchRecords() {
    return openConnection()
        .then(fetchRecords)
        .then(groupById)
        .catch(rethrow)
        .done(closeConnection);
} 

function closeConnection(result) {
   releaseConnection();
   return result;
}

由于我调用完成后返回不是一个承诺,而是一个未定义的。

我希望在我的客户中能做到:

resource.fetchRecords().then(/*do something else*/);

看起来我必须将底层资源暴露给客户端,以便我可以这样做:

resource
  .openConnection()
  .then(resource.fetchRecords)
  .then(/*do something else*/)
  .catch(/*..*/)
  .end(resource.close)

我不知道Q或承诺......但我想也许有更好的方法?

我应该这样做:

 module.exports = function fetchRecords() {
    return openConnection()
        .then(fetchRecords)
        .then(groupById)
        .then(closeConnection)
        .catch(rethrow);
} 

1 个答案:

答案 0 :(得分:2)

而不是done使用finally,它返回一个承诺:

https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback

module.exports = function fetchRecords() {
    return openConnection()
        .then(fetchRecords)
        .then(groupById)
        .catch(rethrow)
        .finally(closeConnection);
}