FileSystemFileHandle:createSyncAccessHandle() 方法

安全上下文: 此项功能仅在一些支持的浏览器安全上下文(HTTPS)中可用。

FileSystemFileHandle 接口的 createSyncAccessHandle() 方法返回一个 Promise 对象,可兑现一个用于同步读写文件的 FileSystemSyncAccessHandle (en-US) 对象。此方法的同步特性带来了性能优势,但是只能在专用于操作源私有文件系统 (en-US)上的文件的 Web Worker 中使用。

创建 FileSystemSyncAccessHandle (en-US) 会对与文件句柄关联的文件进行独占锁定。这用于在文件已有的访问句柄被关闭前,阻止对文件创建更多的 FileSystemSyncAccessHandle (en-US)FileSystemWritableFileStream (en-US)

语法

js

createSyncAccessHandle()

参数

无。

返回值

一个 Promise 对象,可兑现一个 FileSystemSyncAccessHandle (en-US) 对象。

异常

InvalidStateError DOMException

如果 FileSystemSyncAccessHandle (en-US) 对象代表的不是源私有文件系统 (en-US)上的文件,抛出此异常。

NoModificationAllowedError DOMException

如果浏览器无法获得文件句柄所关联的文件的锁定,抛出此异常。

NotAllowedError DOMException

如果在 API 层面上没有被授予权限(也就是需要调用 FileSystemHandle.requestPermission),抛出此异常。

示例

以下异步事件处理函数处于 Web Worker 上下文。其中的代码片段创建了一个同步文件访问句柄。

js

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

参见