DisposableStack.prototype.defer()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Phương thức defer() của các instance DisposableStack nhận một hàm callback để gọi khi ngăn xếp bị hủy.
Cú pháp
defer(onDispose)
Tham số
onDispose-
Một hàm sẽ được gọi khi ngăn xếp bị hủy. Hàm không nhận đối số nào.
Giá trị trả về
Không có (undefined).
Ngoại lệ
TypeError-
Ném ra nếu
onDisposekhông phải là một hàm. ReferenceError-
Ném ra nếu ngăn xếp đã bị hủy.
Mô tả
Mục đích chính của defer() là đăng ký một callback dọn dẹp không gắn với việc hủy một tài nguyên cụ thể nào. Nếu callback gắn với một tài nguyên cụ thể, bạn nên dùng use() hoặc adopt() thay thế. Bạn cũng có thể dùng defer khi tài nguyên không được khai báo trong code của bạn:
function consumeReader(reader) {
using disposer = new DisposableStack();
disposer.defer(() => reader.releaseLock());
// Do something with reader
}
Ví dụ
>Sử dụng defer()
Hàm này thiết lập một khóa đơn giản để ngăn nhiều thao tác bất đồng bộ chạy cùng lúc. Khóa được giải phóng khi hàm hoàn thành.
let isLocked = false;
async function requestWithLock(url, options) {
if (isLocked) {
return undefined;
}
using disposer = new DisposableStack();
isLocked = true;
disposer.defer(() => (isLocked = false));
const data = await fetch(url, options).then((res) => res.json());
return data;
}
Đặc tả
| Specification |
|---|
| ECMAScript Async Explicit Resource Management> # sec-asyncdisposablestack.prototype.defer> |