// 模拟异步操作函数,返回Promise
function asyncOperation1() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('操作1的结果');
}, 1000);
});
}
function asyncOperation2() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('操作2的结果');
}, 1500);
});
}
// 模拟释放资源的函数
function releaseResource1() {
console.log('释放资源1');
}
function releaseResource2() {
console.log('释放资源2');
}
// 执行异步操作并管理资源
function executeWithResourceManagement() {
const operations = [
{
asyncFn: asyncOperation1,
releaseFn: releaseResource1
},
{
asyncFn: asyncOperation2,
releaseFn: releaseResource2
}
];
const promises = operations.map(op => {
return new Promise((resolve, reject) => {
op.asyncFn()
.then(result => {
resolve(result);
})
.catch(err => {
reject(err);
})
.finally(() => {
op.releaseFn();
});
});
});
return Promise.all(promises);
}
// 调用执行函数
executeWithResourceManagement()
.then(results => {
console.log('所有操作结果:', results);
})
.catch(err => {
console.log('出现错误:', err);
});
资源管理思路
- 封装资源操作与释放:将每个异步操作函数及其对应的资源释放函数封装在一个对象中,方便管理。
- Promise包装:对每个异步操作函数使用
Promise
进行包装,在 finally
块中调用资源释放函数,确保无论操作成功或失败,资源都能被释放。
- Promise.all 并发执行:将所有包装后的
Promise
放入 Promise.all
中,实现并发执行多个异步操作,并等待所有操作完成或有一个操作失败。这样可以确保所有资源都能在操作结束后正确释放,同时也能并发获取多个异步操作的结果。