javascript - 当你在异步函数中返回一个 Promise 时会发生什么?
问题描述
据我了解,异步函数总是返回一个 Promise,它在函数返回时解析,或者在抛出错误时拒绝。
如果异步函数自己返回一个 Promise 会发生什么?在调用下面的 download() 函数时应该如何处理?
const download = async () => {
const res = await axios({
"...",
method: 'GET',
responseType: 'stream'
});
const writer = fs.createWriteStream(absoluteArchivePath);
res.data.pipe(writer);
return new Promise((resolve, reject) => {
writer.on('finish', () => resolve());
writer.on('error', () => reject());
})
}
解决方案
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
Promise 对象表示异步操作的最终完成(或失败)及其结果值。
const myAsyncFunction = error => {
return new Promise((resolve, reject) => {
if (error) {
reject('an error occured');
} else {
resolve('OK');
}
});
};
myAsyncFunction(true)
.then(r => {
console.log('ok');
})
.catch(err => {
console.log('error');
});
// log: error
myAsyncFunction(false)
.then(r => {
console.log('ok');
})
.catch(err => {
console.log('error');
});
// log: ok
推荐阅读
- oracle - 使用 sysdate 在 oracle 中按范围分区
- c# - 具有 Identity Server4 身份验证的 MVC 客户端陷入无限重定向循环
- python - 如何实现一个 pytorch 求解器,可以非常快速地并行求解大量非线性方程(如 scipy.fsolve)?
- amazon-web-services - Route 53 不允许我通过应用程序负载均衡器访问 ec2 实例
- python - DataFrame中值的百分比分配
- laravel - 通过作曲家安装 Laravel Nova 在生产服务器上失败
- ios - 如何根据 iOS 人机界面指南命名 Instagram 菜单?
- jsonata - Jsonata 版本 1.8.5 存在未定义对象的问题
- java - 如何在不使用 Spring Boot 保存到磁盘的情况下读取 zip 文件?
- excel - 这个工作表求和函数非常慢 - 加快速度的想法?