越努力,越幸运,做个ccode~

0%

实现node中的util.promisify

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

实现原理:

改变callback 在执行callback 的时候将参数resolve 出去 这样就可以在执行函数的时候拿到回调函数的参数 再执行真正的callback

1
function a(str,callback){
2
  callback(str+'456') 
3
}
4
5
function promisify(fn) {
6
  return function (...args) {
7
      return new Promise(function (resolve, reject) {
8
          let callback = function(...args) {
9
            resolve(...args)
10
          }
11
          fn.apply(null, [...args,callback]);
12
      });
13
  }
14
} 
15
16
const aa = promisify(a)
17
18
async function xxx(){
19
  const data = await aa('123’)   // data 就是回调函数中的参数 
20
  console.log(data)
21
}
22
23
xxx()