vue2中,这两种异步书写方式,为何第二种没有反应,不显示出导入成功提示?

                importPolicemanList({ fileId: fileId[0].id }).then(()=>{
                    this.$message.success("导入成功");
                }); (正确,能显示导入成功)

--------------------上下两者等价吧,为何下面的当时不显示导入成功------------------

                try{
                    await importPolicemanList({ fileId: fileId[0].id })
                    this.$message.success("导入成功");
                }catch(err){
                    this.$message.error(`${err}`);
                }(错误,什么都不显示)

希望能得到正确的结果!

阅读 1.1k
5 个回答

这样监听一下异常

await importPolicemanList({ fileId: fileId[0].id }).catch(err => { ... })

catch 的参数是 err, 但是 $message 打印的是 error

提问者改问题之间的回答:
贴的代码不足,我也不会vue,不过说问题也差不多。

从你问的这个问题来看,你认为两种写法是等价的,但是其实是不等的,这就是问题了。

注意 你的第一种写法是 await action().then(() => console.log('1')),await 会等待then的执行,而第二种则不是。
你试试将第二个改成 await imp....; await this.$me...;,这样两者才等效。

提问者该问题之后的回答:
你的代码是否处于循环体内?有的循环不支持异步感知,await是不生效的。

看下你的 importPolicemanList 方法实现代码,感觉不一定是个典型的 Promise

两种写法是同时出现一个函数内调用的吗?
如果一起调用的话
第二次调用 importPolicemanList返回的 Promise内部状态可能没改变 一直在等待完成
因此 this.$message.success("导入成功")没加入微队列 等待执行

await importPolicemanList({ fileId: fileId[0].id })
this.$message.success("导入成功");
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏