将原本需要通过传入回调参数来实现回调执行改为利用
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() |