err-first

没打补丁时:遵循err-first规范,错误放到数组的第一个元素,成功的结果放在数组的第二个元素

uniapp vue2中比较常用 但是在vue3中就测地放弃了

Vue2 对部分 API 进行了 Promise 封装,返回数据的第一个参数是错误对象,第二个参数是返回数据。此时使用 catch 是拿不到报错信息的,因为内部对错误进行了拦截。

// 默认方式
uni.request({
  url: "https://www.example.com/request",
  success: (res) => {
    console.log(res.data);
  },
  fail: (err) => {
    console.error(err);
  },
});

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

// Await
async function request() {
  var [err, res] = await uni.request({
    url: "https://www.example.com/request",
  });
  console.log(res.data);
}

Vue3 对部分 API 进行了 Promise 封装,调用成功会进入 then 方法 回调。调用失败会进入 catch 方法 回调

        // 默认方式
uni.request({
  url: "https://www.example.com/request",
  success: (res) => {
    console.log(res.data);
  },
  fail: (err) => {
    console.error(err);
  },
});

// 使用 Promise then/catch 方式调用
uni
  .request({
    url: "https://www.example.com/request",
  })
  .then((res) => {
    // 此处的 res 参数,与使用默认方式调用时 success 回调中的 res 参数一致
    console.log(res.data);
  })
  .catch((err) => {
    // 此处的 err 参数,与使用默认方式调用时 fail 回调中的 err 参数一致
    console.error(err);
  });

// 使用 Async/Await 方式调用
async function request() {
  try {
    var res = await uni.request({
      url: "https://www.example.com/request",
    });
    // 此处的 res 参数,与使用默认方式调用时 success 回调中的 res 参数一致
    console.log(res);
  } catch (err) {
    // 此处的 err 参数,与使用默认方式调用时 fail 回调中的 err 参数一致
    console.error(err);
  }
}

在微信app开发中,基于uniapp开发时,在main.js中会引入uni.promisify.adaptor打补丁, 打了补丁就是传统的 promise方案:.then拿成功的结果 , .catch拿失败的结果

uni.promisify.adaptor.js

uni.addInterceptor({
  returnValue (res) {
    if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
      return res;
    }
    //默认使用的 error-first规范,res[0]是错误对象,res[1]是响应结果 
    return new Promise((resolve, reject) => {
      res.then((res) => res[0] ? reject(res[0]) : resolve(res[1]));
    });
  },
})

在main.js引入

import './uni.promisify.adaptor‘

发请求时

async onLoad(){
    console.log('页面加载了 onLoad')
	// 打了补丁就是传统的 promise方案:.then拿成功的结果 , .catch拿失败的结果
	const res=await uni.request({url:'https://hmajax.itheima.net/api/news'})
	console.log(res)
		},

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值