FileSystemFileHandle:createSyncAccessHandle() 方法
Baseline 2023
Newly available
Since March 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
备注: 此特性仅在专用 Web Worker 中可用。
FileSystemFileHandle
接口的 createSyncAccessHandle()
方法返回一个 Promise
对象,可兑现一个用于同步读写文件的 FileSystemSyncAccessHandle
对象。此方法的同步特性带来了性能优势,但是只能在专用于操作源私有文件系统上的文件的 Web Worker 中使用。
创建 FileSystemSyncAccessHandle
会对与文件句柄关联的文件进行独占锁定。这用于在文件已有的访问句柄被关闭前,阻止对文件创建更多的 FileSystemSyncAccessHandle
或 FileSystemWritableFileStream
。
语法
createSyncAccessHandle()
参数
无。
返回值
一个 Promise
对象,可兑现一个 FileSystemSyncAccessHandle
对象。
异常
NotAllowedError
DOMException
-
如果在读写(
readwrite
)模式下句柄的PermissionStatus.state
不是granted
,则抛出该错误。 InvalidStateError
DOMException
-
如果
FileSystemSyncAccessHandle
对象代表的不是源私有文件系统上的文件,抛出此异常。 NotFoundError
DOMException
-
如果未找到当前条目,则抛出该异常。
NoModificationAllowedError
DOMException
-
如果浏览器无法获得文件句柄所关联的文件的锁定,抛出此异常。
示例
以下异步事件处理函数处于 Web Worker 上下文。其中的代码片段创建了一个同步文件访问句柄。
onmessage = async (e) => {
// 获取从主线程发往 worker 的消息
const message = e.data;
// 获取草稿文件的句柄
const root = await navigator.storage.getDirectory();
const draftHandle = await root.getFileHandle("draft.txt", { create: true });
// 获取同步访问句柄
const accessHandle = await draftHandle.createSyncAccessHandle();
// ……
// 用完 FileSystemSyncAccessHandle 记得把它关闭
accessHandle.close();
};
规范
Specification |
---|
File System Standard # api-filesystemfilehandle-createsyncaccesshandle |
浏览器兼容性
BCD tables only load in the browser