【问题标题】:Vue continue on successful callbackVue继续成功回调
【发布时间】:2020-05-09 22:41:27
【问题描述】:

我有一个带有 Vuex 依赖项的 Vue 应用程序。程序逻辑是Facebook分享成功后发送消息。

这是在点击按钮时触发发送消息的方法:

onSubmit() {
    if(this.shouldShowShareModal){
        this.$store.dispatch('openModal', 'SHARE_MODAL');
        return;
    }

    this.$store.dispatch('sendMessage', {
        conversation_id: this.conversationId,
        message        : this.messageText,
        message_type_id: 1
    }).then(() => {
        this.messageText = '';
        this.scrollToBottom();
    });
},

openModal 只是将给定模式的值设置为 true,因此v-if 显示具有按钮的模式,该按钮在share 方法触发 Facebook 分享:

share() {
    var self = this;
    FB.ui({
        method: 'share',
        href: 'https://developers.facebook.com/docs/'
    }, function(){
        self.$store.dispatch('sharedThroughFacebook');
        self.$store.dispatch('closeModal', 'SHARE_MODAL');
    });
}

现在我遇到的问题是如何在 Facebook 回调成功后继续发送消息?目前使用sharedThroughFacebook 我只是将商店共享标志设置为true,但我不确定仅在成功回调后发送消息的最佳方法?如果我将数据推送到模态,那似乎是一个肮脏的解决方案,并且模态不应该知道消息状态。另一方面,将对话 ID、消息、类型和文本放在 Vuex 存储中似乎是一种开销,因为该组件是唯一使用数据的组件。

【问题讨论】:

    标签: javascript vuejs2 vuex


    【解决方案1】:

    你可以像这样编写你的动作

    actions: {
      async share ({ dispatch, commit }) {
        await dispatch('sharedThroughFacebook') // wait for `sharedThroughFacebook` to finish
        await dispatch('closeModal') // close the modal before sending the message
        commit('sendMesseage') 
      },
      async sharedThroughFacebook (context, payload) {
         FB.ui({
            method: 'share',
            href: 'https://developers.facebook.com/docs/'
        })
     }
    }
    

    【讨论】:

    • 这不是问题,因为我已经有一个成功回调。问题是触发(或更确切地说是继续触发)以发送消息。向下传播成功
    • 那么为什么不从 sharedThroughFacebook action self.$store.dispatch('sharedThroughFacebook').then() // send message987654322@返回一个承诺
    • 因为share 方法处于模态(在根上),并且消息数据在消息组件上。消息组件有onSubmit 触发打开模式。例如,如果我在那里放置一个回调,它将在模式成功打开时返回......我无法在模式打开和用户点击后捕获回调
    • 如果你使用异步等待来编写你的操作会怎样
    • 我无法等待只有在单击模式后才会发生的呼叫。我无法将承诺传播给原始调用者
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2021-04-09
    • 2011-11-11
    相关资源
    最近更新 更多