IDBRequest
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
* Some parts of this feature may have varying levels of support.
Note: This feature is available in Web Workers.
Giao diện IDBRequest của IndexedDB API cung cấp quyền truy cập vào kết quả của các yêu cầu bất đồng bộ tới cơ sở dữ liệu và các đối tượng cơ sở dữ liệu bằng các thuộc tính trình xử lý sự kiện. Mọi thao tác đọc và ghi trên cơ sở dữ liệu đều được thực hiện thông qua một request.
Ban đầu, đối tượng request không chứa bất kỳ thông tin nào về kết quả của thao tác. Khi thông tin trở nên khả dụng, một sự kiện sẽ được kích hoạt trên request và thông tin đó sẽ có thể truy cập qua các thuộc tính của thể hiện IDBRequest.
Mọi thao tác bất đồng bộ đều trả về ngay một thể hiện IDBRequest. Mỗi request có một readyState được đặt là trạng thái 'pending'; trạng thái này chuyển sang 'done' khi request hoàn tất hoặc thất bại. Khi trạng thái là done, mọi request đều trả về một result và một error, đồng thời một sự kiện được kích hoạt trên request. Khi trạng thái vẫn là pending, mọi nỗ lực truy cập result hoặc error sẽ ném ra ngoại lệ InvalidStateError.
Nói đơn giản, mọi phương thức bất đồng bộ đều trả về một đối tượng request. Nếu request hoàn tất thành công, kết quả sẽ có sẵn qua thuộc tính result và một sự kiện báo thành công sẽ được kích hoạt trên request (success). Nếu xảy ra lỗi trong khi thực hiện thao tác, ngoại lệ sẽ có sẵn qua thuộc tính error và một sự kiện lỗi sẽ được kích hoạt (error).
Giao diện IDBOpenDBRequest được dẫn xuất từ IDBRequest.
Thuộc tính thể hiện
Cũng kế thừa các thuộc tính từ EventTarget.
IDBRequest.errorRead only-
Trả về một
DOMExceptiontrong trường hợp request không thành công, cho biết lỗi đã xảy ra là gì. IDBRequest.resultRead only-
Trả về kết quả của request. Nếu request chưa hoàn tất, kết quả sẽ không khả dụng và ngoại lệ
InvalidStateErrorsẽ được ném ra. IDBRequest.sourceRead only-
Nguồn của request, chẳng hạn một
IDBIndexhoặcIDBObjectStore. Nếu không có nguồn nào tồn tại, ví dụ khi gọiIDBFactory.open, thuộc tính này trả vềnull. IDBRequest.readyStateRead only-
Trạng thái của request. Mọi request đều bắt đầu ở trạng thái
pending. Trạng thái sẽ chuyển thànhdonekhi request hoàn tất thành công hoặc khi xảy ra lỗi. IDBRequest.transactionRead only-
Transaction của request. Thuộc tính này có thể là
nullđối với một số request, ví dụ các request được trả về từIDBFactory.opentrừ khi cần nâng cấp. Khi đó bạn chỉ đang kết nối tới cơ sở dữ liệu, nên không có transaction nào để trả về.
Phương thức thể hiện
Không có phương thức, nhưng kế thừa các phương thức từ EventTarget.
Sự kiện
Nghe các sự kiện này bằng addEventListener() hoặc bằng cách gán trình xử lý sự kiện vào thuộc tính oneventname của giao diện này.
Ví dụ
Trong đoạn mã sau, chúng ta mở một cơ sở dữ liệu bất đồng bộ và tạo một request; các hàm onerror và onsuccess được dùng để xử lý trường hợp thành công và lỗi. Để xem một ví dụ hoạt động đầy đủ, hãy xem ứng dụng To-do Notifications của chúng tôi (xem ví dụ trực tiếp).
let db;
// Mở cơ sở dữ liệu của chúng ta
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
// hai trình xử lý sự kiện này phản ứng khi cơ sở dữ liệu
// được mở thành công hoặc không thành công
DBOpenRequest.onerror = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Error loading database.";
};
DBOpenRequest.onsuccess = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Database initialized.";
// lưu kết quả mở cơ sở dữ liệu
db = DBOpenRequest.result;
};
Thông số kỹ thuật
| Specification |
|---|
| Indexed Database API 3.0> # request-api> |
Tương thích trình duyệt
Xem thêm
- Dùng IndexedDB
- Bắt đầu transaction:
IDBDatabase - Dùng transaction:
IDBTransaction - Thiết lập một phạm vi khóa:
IDBKeyRange - Truy xuất và thay đổi dữ liệu của bạn:
IDBObjectStore - Dùng cursor:
IDBCursor - Ví dụ tham khảo: To-do Notifications (Xem ví dụ trực tiếp).