lovnie
lovnie
  • 发布:2023-03-21 21:06
  • 更新:2023-03-22 12:07
  • 阅读:320

【报Bug】uniapp的request请求的Promise 封装出错

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

HBuilderX类型: 正式

HBuilderX版本号: 3.7.3

浏览器平台: Chrome

项目创建方式: HBuilderX

示例代码:

// Promise
uni.request({
url: "https://unidemo.dcloud.net.cn/api/news",
})
.then((data) => {
// data为一个数组
// 数组第一项为错误信息 即为 fail 回调
// 第二项为返回数据
var [err, res] = data;
console.log(res);
});

// Await
async function request() {
var [err, res] = await uni.request({
url: "https://unidemo.dcloud.net.cn/api/news",
});
console.log(res);
}

操作步骤:

// Promise
uni.request({
url: "https://unidemo.dcloud.net.cn/api/news",
})
.then((data) => {
// data为一个数组
// 数组第一项为错误信息 即为 fail 回调
// 第二项为返回数据
var [err, res] = data;
console.log(res);
});

// Await
async function request() {
var [err, res] = await uni.request({
url: "https://unidemo.dcloud.net.cn/api/news",
});
console.log(res);
}

预期结果:

res能返回信息

实际结果:

报错 data是个对象不是数组

bug描述:

照着官方文档https://uniapp.dcloud.net.cn/api/#promise-%E5%B0%81%E8%A3%85 这样写不管是上面的方法还是下面的都是会报错的,报错信息如下:
Uncaught (in promise) TypeError: Invalid attempt to destructure non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.

2023-03-21 21:06 负责人:无 分享
已邀请:
呆狗的一生

呆狗的一生 - 呆狗的一生

Vue 2 和 Vue 3 项目中 API Promise 化 返回格式不一致。如果是已经添加了用于格式转换的拦截器,那么data 已经是 success 的数据了。如果还是有问题可以上传用于测试的demo

  • lovnie (作者)

    嗯,现在data是返回数据,用的是vue2,我记得之前这样写是没问题的,官方文档也是这样写的,现在是版本升级导致不能用了吗

    2023-03-22 08:58

lovnie

lovnie (作者)

我找到问题了,创建项目的时候main.js默认会转成vue3的格式,把那个转换代码删了就可以用了。我创建项目选择的是vue2的,main.js应该不用生成转换代码吧

要回复问题请先登录注册