如何将URL.revokeObjectURL 添加到 Promise 的 resolve 中
时间: 2024-10-10 20:06:10 浏览: 39
在JavaScript中,如果你想要在Promise的`resolve`阶段处理URL并确保资源管理得当,通常不会直接在`resolve`内部调用`revokeObjectURL`,因为`resolve`是用来通知Promise已成功完成并且有结果返回的。但是,你可以创建一个新的Promise链,在原有的`resolve`之后添加一个额外的操作,比如:
```javascript
function loadImage(url) {
return new Promise((resolve, reject) => {
const img = new Image();
// 图片加载成功
img.onload = function() {
resolve(img);
};
// 图片加载失败
img.onerror = reject;
// 加载图片
img.src = url;
}).then(image => {
try {
// 异步操作后,如果一切顺利,可以在这里取消引用
window.URL.revokeObjectURL(url);
return image; // 返回完整的加载后的图像对象
} catch (error) {
console.error('Error revoking object URL:', error);
throw error; // 如果出现错误,原样抛出
}
});
}
// 使用
loadImage(url)
.then(image => {
// 处理加载成功的图片
})
.catch(error => {
// 处理加载失败的情况
});
```
这样,当你需要在图片加载完成且已经不再需要原始URL时,会自动执行`revokeObjectURL`,同时保持了Promise的正常流程。
阅读全文