1.有下面一个异步函数getUserInfo,其结果是通过回调函数传递的。 function getUserInfo(cb) { request(url, (err, result) { if ( err ) { if ( cb ) { cb(err); } return; } if ( cb ) { cb(null, result.data); } }); } (1)请编写一个新函数getUserInfoAsync,调用getUserInfo,确保返回的是Promise。 (2)请编写通用函数promisify,通过一个通过回调传递结果的函数生成Promise的函数。
时间: 2024-01-19 13:02:17 浏览: 38
好的,下面是代码实现:
1. 编写 getUserInfoAsync 函数:
```javascript
function getUserInfoAsync() {
return new Promise((resolve, reject) => {
getUserInfo((err, data) => {
if (err) {
reject(err);
} else {
resolve(data);
}
});
});
}
```
2. 编写 promisify 通用函数:
```javascript
function promisify(fn) {
return function(...args) {
return new Promise((resolve, reject) => {
fn(...args, (err, data) => {
if (err) {
reject(err);
} else {
resolve(data);
}
});
});
};
}
```
使用时只需要将需要 promisify 的函数作为参数传入即可,例如:
```javascript
const getUserInfoPromise = promisify(getUserInfo);
getUserInfoPromise()
.then(data => console.log(data))
.catch(err => console.error(err));
```
阅读全文