把callback改造成promise

这其实是一个很简单的问题-_-

我们现在都习惯了使用 promise,但是还是经常会碰到一些 callback 形式的 api ,那么就把它们也改造成 promise 吧。

node 中的 fs.readFile 为例。

const fs = require('fs')

const promisify = fn => {
  return function (path) {
    return new Promise((resolve, reject) => {
      fn.call(null, path, (err, data) => {
        if (err) {
          reject(err)
        } else {
          resolve(data)
        }
      })
    })
  }
}

const pReadFile = promisify(fs.readFile)

pReadFile('./README.md')
  .then(data => {
    console.log(data.toString())
  })
  .catch(err => {
    console.log(err)
  })

async function test () {
  try {
    const data = await pReadFile('./README.md')
    console.log(data.toString())
  } catch (err) {
    console.log(err)
  }
}

test()
阅读 126

推荐阅读