Я использую канал толкателя в приложении 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.info('end') ;
}).typistStop() ;
}
});
Как видите, я могу поймать событие end_type (когда функция перестает писать).
Проблема в том, что я не могу - или понятия не имею, как - помещает "channel.bind" в очередь, и поэтому ожидаю, пока printPhrase(txt) не закончит работу ... поэтому на экране не отображается более одной печати за время ...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно будет создать какую-то очередь, чтобы убедиться, что они не срабатывают, пока не будет завершена предыдущая. Этот код не тестировался, но должен помочь:
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 ...