vue3写法
<template>
<view class="content">
<button @click="choose()">选中</button>
</view>
</template>
<script setup>
async function choose(){
try {
let tab = await uni.showActionSheet({
title:'操作1',
itemList:['1','2','3']
})
if (tab.errMsg !== 'showActionSheet:ok') return
await choose2()
} catch (error) {
//TODO handle the exception
}}
async function choose2(){
try {
let tab = await uni.showActionSheet({
title:'操作2',
itemList:['A','B','C']
})
if (tab.errMsg !== 'showActionSheet:ok') return
console.log(tab,'>>>>>>>')
} catch (error) {
console.log(err)
//TODO handle the exception
}
}
</script>
<style>
</style>
vue2写法
<template>
<view >
<button @click="choose()">选中</button>
</view>
</template>
<script>
// console.log('23452345234')
export default {
methods: {
async choose(){
let tab = await uni.showActionSheet({
title:'操作1',
itemList:['1','2','3']
})
if (tab.errMsg !== 'showActionSheet:ok') return
await this.choose2()
},
async choose2(){
let tab = await uni.showActionSheet({
title:'操作2',
itemList:['A','B','C']
})
if (tab.errMsg !== 'showActionSheet:ok') return
console.log(tab,'>>>>>>>')
}
},
}
</script>
<style scoped>
</style>
1 个回复
Ask小助手 - Ask社区AI助手
作为官方人员,我对这个 bug 反馈进行评审。
反馈内容完整性分析
这个反馈整体上结构清晰,问题描述、代码示例、复现步骤、预期和实际结果都有提供,但有一些地方需要补充和完善。
async/await连续调用uni.showActionSheet时遇到的问题。提供的代码示例基本展示了问题逻辑,但写法上存在一些不规范的地方,可能会引入其他干扰因素。例如,在<script setup>语法下混合使用了export default的选项式 API 写法,并且使用了 Vue2 风格的代码。这可能会影响对问题根源的判断。choose2方法里,如果用户取消,uni.showActionSheet返回的 Promise 会进入reject状态,当前代码没有catch捕获,这可能会导致未捕获的异常,影响后续流程。复现步骤需要更精确地说明每一步的操作。Promise 化,uni.showActionSheet等 API 的 Promise 化行为在 Vue 2 和 Vue 3 中有显著差异。缺少这些信息,官方人员将无法准确判断问题的上下文。Bug 成立性分析
这个 Bug 可能成立,但其表现与 Vue 版本和运行平台强相关,需要用户补充信息后才能最终确认。
从知识库中可以看到,
uni.showActionSheet在非 H5 端是原生控件。对于 Promise 化的行为,Vue 2 和 Vue 3 项目中的处理方式不同。在 Vue 2 中,uni.showActionSheet的 Promise 返回的是一个数组[err, res],而在 Vue 3 中,则是标准的then/catch模式。用户提供的代码片段混合了 Vue 3 的
<script setup>和 Vue 2 的选项式 API,写法不规范。如果是在 Vue 3 项目下,当用户在showActionSheetB中点击取消时,API 返回的 Promise 应被reject。用户代码中没有catch捕获这个错误,这可能导致未处理的 Promise 拒绝,从而干扰后续的异步流程,可能会让下一次调用showActionSheetB时立即返回了一个之前缓存的结果或出现意料之外的行为。这更像是一个因错误用法和未捕获异常导致的流程控制问题。此外,知识库中有一个类似的 H5 平台问题案例 【报Bug】调用uni.showModal,没有得到预期效果,应该是bug,指出在 H5 端,浏览器原生弹窗是单例的,连续调用可能导致异常。虽然
showActionSheet在 App 端是原生控件,但此案例也说明了此类异步弹窗在连续调用时可能存在平台限制或时序问题。总结与建议
综合来看,这个反馈有价值,但需要用户补充关键信息并修正代码示例。
<script setup>) 写法。async/await调用时,必须添加try...catch来捕获用户取消操作(即fail回调)的情况,避免未捕获的异常影响程序逻辑。setTimeout),或者改用非await的链式调用方式,确保原生弹窗有足够时间完成生命周期。这在 【报Bug】调用uni.showModal,没有得到预期效果,应该是bug 的类似案例中也被提及为临时解决方案。请用户补充以上信息并修正示例后,再提交反馈,这样能帮助我们更高效地定位和解决问题。
要回复问题请先登录或注册
公告
更多>相关问题