Expo FileSystem.writeAsStringAsync 不像 Promise

Expo FileSystem.writeAsStringAsync doesn't act like a Promise

我正在使用函数 Expo.writeAsStringAsync() (文档:https://docs.expo.io/versions/latest/sdk/filesystem/#filesystemwriteasstringasyncfileuri-contents-options)。 我注意到它需要不同的时间来处理不同大小的文件(正如预期的那样),但是无法知道它何时完成,因为它 returns 什么都没有。所以,如果我必须在写入文件后立即访问该文件,我会发现它是空的,因为它可能还在写入。

有没有办法在完成后收到答案?就像一个普通的 promise-then-catch?

P.S.: 我尝试过承诺,但没有成功。

我可以看出 API 文档具有误导性,因为它们没有指定 return 类型。

实际上 API 调用定义为 async 函数(参见 source-code):

export async function writeAsStringAsync(
  fileUri: string,
  contents: string,
  options: WritingOptions = {}
): Promise<void> {
  // ...
}

每个 async 函数 return 都是一个 Promise(您可以在上面的 TypeScript 签名中看到 Promise<void>)。

这意味着您可以使用 returned Promise 和 await 或使用 .then() 等待文件系统调用完成的时刻。

await Expo.writeAsStringAsync(fileUri, contents, options);
// do something when write is finished 
// you can catch errors with try/catch clause

Expo.writeAsStringAsync(fileUri, contents, options).then(
  () => { /* do something when write is finished */ }
).catch(err => { /* handle errors */ }