Das*_*sto 1 camera-roll react-native
我的 React Native(适用于 iOS)照片应用程序中有一个“全部保存”函数,它可以抓取图像数组并将它们传递给CameraRoll.saveToCameraRoll函数。
这是我保存它们的功能:
saveAllToCameraRoll = () => {
for (let image of this.state.downloadList) {
CameraRoll.saveToCameraRoll(image.uri);
}
};
Run Code Online (Sandbox Code Playgroud)
downloadList 是引用存储在 Firebase 存储中的图像的 Firebase 对象数组:
[
-uid1234 : {
uri: "https://firebasestorage.googleapis.com/....",
uploadUser: {
....
}
},
....
]
Run Code Online (Sandbox Code Playgroud)
这一切似乎都有效,并且适用于单个/少数图像,但是如果 downloadList 变得太大(似乎是 11 个图像),它会开始发出警告并且某些图像将无法保存。警告是:
可能未处理的承诺拒绝错误:写忙
并且:
保存裁剪图像时出错:错误域=ALAssetsLibraryErrorDomainCode=-3301“写忙”
看起来很简单,你不能这么快地保存这么多,否则它会冻结,但我找不到关于如何等待它完成一个来开始下一个的文档。
CameraRoll.saveToCameraRoll返回一个Promise,所以你可以等待它完成:
saveAllToCameraRoll = async () => {
for (let image of this.state.downloadList) {
await CameraRoll.saveToCameraRoll(image.uri);
}
};
Run Code Online (Sandbox Code Playgroud)
或者使用Airbnb推荐的方式:
this.state.downloadList.reduce((prev, { uri }) =>
prev.then(() => CameraRoll.saveToCameraRoll(uri), Promise.resolve()));
Run Code Online (Sandbox Code Playgroud)
如果你仍然想并行执行一些操作,你可以迭代一个步骤,并在每次迭代中用Promise.all包装这些操作。
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |