You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用expo-image-picker选择图片时为何出现Promise拒绝?

解决expo-image-picker返回结果无assets字段的问题

这是因为expo-image-picker的版本差异导致返回格式不同:

  • 版本 >=13.0.0:调用launchImageLibraryAsync/launchCameraAsync会返回包含assets数组的对象,需通过result.assets[0]获取选中的图片资源
  • 版本 <13.0.0:返回的是单个媒体对象,直接通过result.uri、result.assetId等字段访问即可

具体解决步骤

1. 确认当前包版本

运行以下命令查看expo-image-picker的版本:

npm list expo-image-picker
# yarn 用户执行
yarn list expo-image-picker

2. 对应版本修改代码

情况1:版本 <13.0.0(旧版本)

直接使用返回的result对象,无需访问assets:

import * as ImagePicker from 'expo-image-picker';

const pickImage = async () => {
  const permission = await ImagePicker.requestMediaLibraryPermissionsAsync();
  if (!permission.granted) {
    alert('请授予相册访问权限');
    return;
  }

  const result = await ImagePicker.launchImageLibraryAsync({
    mediaTypes: ImagePicker.MediaTypeOptions.Images,
    allowsEditing: true,
    quality: 1,
  });

  if (!result.cancelled) {
    // 直接使用result的字段
    console.log('图片URI:', result.uri);
    console.log('Asset ID:', result.assetId);
    // 后续上传逻辑用result.uri即可
  }
};

情况2:版本 >=13.0.0(新版本)

如果想保持result.assets[0]的写法,先升级到最新版本:

npm install expo-image-picker@latest
# yarn 用户执行
yarn add expo-image-picker@latest

然后使用官方文档的标准写法:

import * as ImagePicker from 'expo-image-picker';

const pickImage = async () => {
  const permission = await ImagePicker.requestMediaLibraryPermissionsAsync();
  if (!permission.granted) {
    alert('请授予相册访问权限');
    return;
  }

  const result = await ImagePicker.launchImageLibraryAsync({
    mediaTypes: ImagePicker.MediaTypeOptions.Images,
    allowsEditing: true,
    quality: 1,
  });

  if (!result.cancelled) {
    const selectedImage = result.assets[0];
    console.log('图片URI:', selectedImage.uri);
    console.log('Asset ID:', selectedImage.assetId);
  }
};

3. 临时兼容写法(可选)

如果需要同时兼容新旧版本,可添加判断逻辑避免报错:

if (!result.cancelled) {
  const imageAsset = result.assets ? result.assets[0] : result;
  // 使用imageAsset.uri等字段处理上传
}

内容的提问来源于stack exchange,提问作者Hornik Taras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:11:27