尝试从 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
    }

我的问题是:

  1. 是否有更有效的方法来执行此操作,即显示来自 MediaLibrary 的图像而无需调用那么多函数。这感觉比它应该的更混乱和复杂。

  2. 在 getAssetInfo 异步中,资产对象正确显示(使用 console.log)所有属性。但是当我 return 这个对象到 selectAlbum 函数和 console.log 结果时,我得到 null 等。为什么?

对于 #2,问题是您没有在等待通话结果。

const assetWithInfo = await getAssetInfo(assets[i].id); 应该修复它。