没打补丁时:遵循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)
},