如果你希望直接返回并触发 catch
,你可以通过 抛出异常 来实现。在云函数中,使用 throw
来抛出错误,云函数会捕捉到这个错误并触发 catch
。
代码修改
修改返回的方式,抛出一个错误而不是直接返回一个对象。这样,后续的逻辑就可以通过 catch
捕获到这个错误。
1. 抛出异常(触发 catch
)
// 云函数入口文件
const db = wx.cloud.database();
exports.main = async (event, context) => {
const { configType } = event; // 参数,传入 'dev' 或 'test'
try {
// 查询数据库
const res = await db.collection('yourCollectionName').where({
_id: '123' // 假设这是你要查询的文档ID
}).get();
if (res.data.length > 0) {
// 获取配置内容
const configs = res.data[0].configs;
const mergeConfig = configs[configType]?.mergeconfig;
if (mergeConfig) {
// 如果找到了对应的 mergeconfig
return { code: 200, data: mergeConfig };
} else {
// 如果没有找到对应的 mergeconfig,抛出错误
throw new Error(`未找到${configType}的mergeconfig`);
}
} else {
// 如果没有找到对应的文档,抛出错误
throw new Error("没有找到对应的文档");
}
} catch (err) {
// 捕获错误并返回相应的错误信息
return { code: 500, message: err.message }; // 可以根据实际需求自定义错误代码和消息
}
};
2. 在前端捕获错误
在前端调用云函数时,如果云函数抛出了错误,catch
语句会被触发,你可以在前端捕获并处理这些错误。
wx.cloud.callFunction({
name: 'getMergeConfig', // 云函数名称
data: {
configType: 'dev' // 传入 'dev' 或 'test'
},
success: res => {
if (res.result.code === 200) {
console.log('MergeConfig:', res.result.data);
// 处理获取到的 mergeconfig 数据
} else {
wx.showToast({
title: res.result.message,
icon: 'none'
});
}
},
fail: err => {
wx.showToast({
title: `调用失败: ${err.message}`,
icon: 'none'
});
}
});
解释:
-
抛出异常:在
if
判断中,当你找不到mergeconfig
时,可以使用throw new Error(message)
来抛出异常。这样,后面的代码就不会执行,而是跳转到catch
语句。 -
catch 捕获异常:
catch
语句会捕获到云函数内部抛出的异常,然后将错误信息返回给前端。 -
前端处理:在前端,通过
fail
回调来捕获到云函数抛出的错误,并进行相应的处理,比如显示错误信息。
触发 catch
的场景:
- 如果
mergeconfig
未找到,将抛出异常并进入catch
,返回{ code: 500, message: "未找到dev的mergeconfig" }
。 - 如果查询文档未找到,也会抛出异常并进入
catch
,返回{ code: 500, message: "没有找到对应的文档" }
。