【问题标题】:consume events in the right order以正确的顺序消费事件
【发布时间】:2019-03-07 17:53:16
【问题描述】:

我在 Laravel 应用程序中使用通道的推送器。 因此,当我从我的控制器触发一个事件时,我的客户端会收到该事件,并使用推送器功能在我的首页上添加一些带有此库 https://github.com/albburtsev/jquery.typist 的文本:

channel.bind('App\\Events\\TextAdded', function(data) {
            if(data.txt){
                printPhrase(data.txt);
                i++;
            }
        });
        function printPhrase(txt) {
            $('<span>')
                    .addClass('txt_' + i)
                    .appendTo('.typist_dialog')
                    .typist({
                        text:txt,
                        speed: 15,

                    }).on('end_type.typist', function() {
console.log('end')    ;
            }).typistStop() ;
        }

    });

如您所见,我可以捕获事件“end_type”(当函数停止写入时)。

问题是我不能 - 或者我不知道如何 - 将“channel.bind”放在队列中,所以等到printPhrase(txt) 完成......所以没有显示超过一个打印时间在屏幕上...

【问题讨论】:

    标签: javascript laravel events pusher pusher-js


    【解决方案1】:

    您必须设置某种队列,以确保它们在前一个队列完成之前不会触发。此代码未经测试,但应该可以解决问题:

    var printQueue = [];
    var queueWorking = false;
    
    channel.bind('App\\Events\\TextAdded', function(data) {
        if(data.txt){
            printQueue.push(data.txt);
            workQueue();
        }
    });
    
    function printPhrase(txt) {
        i++;
        $('<span>')
            .addClass('txt_' + i)
            .appendTo('.typist_dialog')
            .typist({
                text:txt,
                speed: 15,
            }).on('end_type.typist', function() {
                queueWorking = false;
                workQueue();
            }).typistStop() ;
        }
    
    function workQueue(){
        if(printQueue.length && !queueWorking){
            queueWorking = true;
            printPhrase(printQueue.shift());
        }
    }
    

    【讨论】:

    • 很好的解决方法!我会尽快尝试并让你知道...我想知道是否有更多直接来自 pusher js api 的功能...
    猜你喜欢
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多