手写一个简单的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