把callback改形成promise

这实际上是一个很简单的问题-_-node

咱们如今都习惯了使用 promise,可是仍是常常会碰到一些 callback 形式的 api ,那么就把它们也改形成 promise 吧。api

node 中的 fs.readFile 为例。promise

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()
相关文章
相关标签/搜索