手写一个简单的promisify函数

promisify可以将原本需要通过传入回调参数来实现回调执行(或者叫同步执行)改为利用promise.then的方式来调用,从而实现逻辑上的同步操作。

function promisify(fn) {
  return function(...args) {
    return new Promise((resolve, reject) => {
      fn(...args, (err, data) => {
        if(err) {
          reject(err);
          return;
        }
        resolve(data);
      })
    })
  }
}

调用工具函数返回一个匿名函数,匿名函数接收原函数的参数。

匿名函数被调用后根据这些参数来调用真实的函数,同时拼接一个用来处理结果的callback。
检测到err有值,触发reject,其他情况触发resolve
posted @ 2021-10-21 23:06  jerryfish  阅读(170)  评论(0编辑  收藏  举报