是否有可能进一步扁平这个Promise链?

时间:2017-01-28 18:50:36

标签: javascript promise bluebird

作为小型节点应用程序的一部分,我编写了这个函数,使用mysql/mysqljs将某些东西保存到数据库中(显然是异步操作):

function persist(values) {
  getConnection()
    .then(connection => {
      const {fistName, lastName} = values
      const query = mysql.format(
        'INSERT INTO names VALUES(NULL, ?, ?)',
        [fistName, lastName]
      )

      return new Promise((resolve, reject) => {
        connection.query(query, (err, results, fields) => {
          connection.release()

          if (err) {
            reject(err)
          }

          resolve([results, fields])
        })
      })
    })
    .catch(err => {
      console.error(err)
    })
}

getConnection实际上是我宣称getConnection function的mysqljs / mysql' s using Bluebird的一个版本。

虽然这有效,但由于我使用了Promise构造函数,它对我来说似乎仍然有些笨拙。目前,由于connection.query(回调秒)的特殊签名,这是我能够提出的唯一解决方案。

有没有办法进一步扁平化这个链条,使其更具可读性,同时保持与connection.query签名兼容?

0 个答案:

没有答案