Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Vue.js 2:如何将异步回调\承诺返回到自定义$emit事件_Javascript_Vue.js_Vuejs2_Promise_Async Await - Fatal编程技术网

Javascript Vue.js 2:如何将异步回调\承诺返回到自定义$emit事件

Javascript Vue.js 2:如何将异步回调\承诺返回到自定义$emit事件,javascript,vue.js,vuejs2,promise,async-await,Javascript,Vue.js,Vuejs2,Promise,Async Await,是否可以从自定义事件的侦听器接收数据,或者只是等待数据完成 我的问题是: 我在组件1上有一个自定义事件: 方法:{ 测试:函数(){ //如何等待和\或从侦听器获取数据? 这个.$emit('foo',…); } } 在另一个组件2中,我有一个此事件的侦听器,它执行一些异步操作 方法:{ 异步beforeMount(){ 这个。$on(“foo”,异步()=>{ //一些异步函数 }); }, } 我需要做的是等待侦听器完成异步任务,然后在component1的方法“test”中执行一些其他

是否可以从自定义事件的侦听器接收数据,或者只是等待数据完成

我的问题是:

我在组件1上有一个自定义事件:

方法:{
测试:函数(){
//如何等待和\或从侦听器获取数据?
这个.$emit('foo',…);
}
}
在另一个组件2中,我有一个此事件的侦听器,它执行一些异步操作

方法:{
异步beforeMount(){
这个。$on(“foo”,异步()=>{
//一些异步函数
});
},
}
我需要做的是等待侦听器完成异步任务,然后在component1的方法“test”中执行一些其他操作

理想情况下,我希望在component1的$emit中接收component2中监听器详述的“数据”-此事件只有一个监听器,因此不会出现多次回调等问题

然而,当我使用Vuex时,只要“等待”异步任务就可以了——我会存储并从Vuex存储中获取结果

我曾尝试过使用回调或承诺,但这两种方式都无法发挥作用(可能我写得完全错误)

有可能实现这样的目标吗? 有人能提供一个解释\示例说明如何这样做吗


谢谢

“我需要做的是等待侦听器完成异步任务”——绝对不是。您的事件发射器必须不关心谁在侦听其事件、它们对事件的响应是什么,或者它们需要多长时间才能完成。你的依赖关系一团糟,你需要考虑如何重新构造代码以解决依赖关系问题,而不是试图让事件发射器服从你的意愿。因此,你真正的问题不是“如何让事件发射器等待事件使用者?”,而是“如何更明智地构造此依赖关系?”-这要求您共享更多关于如何立即设置的上下文(即代码)。“而在component1中,只有当该表单有效时,才必须执行操作。”-不知道其他情况,这听起来像是component1可以侦听component2的事件。或者,正如您自己所指出的,可能事件在这里不适合使用。通常,您在前端和后端都进行验证。后端验证用于安全性和完整性,前端验证用于方便用户。但不管怎么说,这只是旁注。如果您有一个函数调用另一个函数,然后需要等到该另一个函数完成后再恢复其自身的工作-这不是一个事件。这是一个函数调用。不要将事件用于流控制。事件只能发送,设计上没有返回通道。它看起来像
this.$emit('foo',…)
应该是对其他组件的常规函数调用。@Tomalak好的,谢谢您的解释:导入点(对我来说)是,我正在使用一些东西(事件)来实现一个功能,而这些东西不是为它们创建的。当我有时间的时候,我会尝试以一种我可以使用函数调用或其他更健壮的方式来重建那个部分,而不是尝试使用事件。