尝试从 Expo MediaLibrary 中的资产中检索 localUri,为什么 return 为空?
Trying to retrieve localUri from assets in Expo MediaLibrary, why does this return null?
我这里有两个问题,一个是 Expo MediaLibrary 问题,另一个是链接 Javascript/scoping 问题。
我有一个 ReactNative Expo 应用程序,可以从用户媒体库加载最新图像。为此,我需要使用 MediaLibrary.getAssetsAsync() 方法。
烦人的是,.getAssetsAsync() 不需要 return localUri 来显示图像。它 returns uri 属性 看起来像这样: "uri": "ph://8A1262C3-23F7-4BD3-8943-C01128DCEEB1"
除非我记错了,否则我不能使用这样的资产文件uri来在反应中显示图像,我们需要localUri。因此,对于每张照片,我都调用 MediaLibrary.getAssetInfoAsync() 方法 - returns localUri。以下是我的实现方式:
const selectAlbum = async (albumName) => {
const foundAlbum = await MediaLibrary.getAssetsAsync({album: albumName, mediaType: 'photo', first: 20})
const assets = foundAlbum['assets'] //array of photos or 'assets'
const assetsWithInfo = []
//for each selected photo
for(let i=0; i<assets.length; i++){
const assetWithInfo = getAssetInfo(assets[i].id)
//console.log(assetWithInfo) //doesnt work, null etc - WHY?!
assetsWithInfo.push(assetWithInfo)
}
}
const getAssetInfo = async (id) =>{
let res = await MediaLibrary.getAssetInfoAsync(id)
let asset={
creationTime: res['creationTime'],
isFavorite: res['isFavorite'],
localUri: res['localUri'],
}
//console.log(asset) //works, object correctly displays
return asset
}
我的问题是:
是否有更有效的方法来执行此操作,即显示来自 MediaLibrary 的图像而无需调用那么多函数。这感觉比它应该的更混乱和复杂。
在 getAssetInfo 异步中,资产对象正确显示(使用 console.log)所有属性。但是当我 return 这个对象到 selectAlbum 函数和 console.log 结果时,我得到 null 等。为什么?
对于 #2,问题是您没有在等待通话结果。
const assetWithInfo = await getAssetInfo(assets[i].id);
应该修复它。
我这里有两个问题,一个是 Expo MediaLibrary 问题,另一个是链接 Javascript/scoping 问题。
我有一个 ReactNative Expo 应用程序,可以从用户媒体库加载最新图像。为此,我需要使用 MediaLibrary.getAssetsAsync() 方法。
烦人的是,.getAssetsAsync() 不需要 return localUri 来显示图像。它 returns uri 属性 看起来像这样: "uri": "ph://8A1262C3-23F7-4BD3-8943-C01128DCEEB1"
除非我记错了,否则我不能使用这样的资产文件uri来在反应中显示图像,我们需要localUri。因此,对于每张照片,我都调用 MediaLibrary.getAssetInfoAsync() 方法 - returns localUri。以下是我的实现方式:
const selectAlbum = async (albumName) => {
const foundAlbum = await MediaLibrary.getAssetsAsync({album: albumName, mediaType: 'photo', first: 20})
const assets = foundAlbum['assets'] //array of photos or 'assets'
const assetsWithInfo = []
//for each selected photo
for(let i=0; i<assets.length; i++){
const assetWithInfo = getAssetInfo(assets[i].id)
//console.log(assetWithInfo) //doesnt work, null etc - WHY?!
assetsWithInfo.push(assetWithInfo)
}
}
const getAssetInfo = async (id) =>{
let res = await MediaLibrary.getAssetInfoAsync(id)
let asset={
creationTime: res['creationTime'],
isFavorite: res['isFavorite'],
localUri: res['localUri'],
}
//console.log(asset) //works, object correctly displays
return asset
}
我的问题是:
是否有更有效的方法来执行此操作,即显示来自 MediaLibrary 的图像而无需调用那么多函数。这感觉比它应该的更混乱和复杂。
在 getAssetInfo 异步中,资产对象正确显示(使用 console.log)所有属性。但是当我 return 这个对象到 selectAlbum 函数和 console.log 结果时,我得到 null 等。为什么?
对于 #2,问题是您没有在等待通话结果。
const assetWithInfo = await getAssetInfo(assets[i].id);
应该修复它。