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 */ }
我正在使用函数 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 */ }