把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()
相關文章
相關標籤/搜索