Warum werden meine gesendeten Livewire-Ereignisse verzögert, bis die Funktion beendet ist?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Warum werden meine gesendeten Livewire-Ereignisse verzögert, bis die Funktion beendet ist?

by Anonymous » 23 Dec 2024, 15:42

Ich habe eine Livewire-Komponente, die ein Video in Teilen auf YouTube hochlädt. Während des Hochladens möchte ich den Fortschrittsbalken im Frontend aktualisieren, indem ich Livewire-Ereignisse für jeden hochgeladenen Block aussende. Das Problem besteht jedoch darin, dass alle ausgelösten Ereignisse erst am Ende der Funktionsausführung empfangen werden und nicht in Echtzeit, während der Upload voranschreitet. Warum passiert das und wie kann ich es beheben?
Image

Hier ist ein vereinfachtes Beispiel meiner aktuellen Implementierung. Die Komponente (YoutubeVideoUploader.php):
class YoutubeVideoUploader extends Component
{
public function uploadVideo()
{
for($i = 0; $i < 10; $i++) {
$this->videoUploadProgress = $i;
$this->dispatch('uploadProgress', ['progress' => $i]);
Log::info("uploadProgress: " . $i . "%"); // this works well
sleep(1);
}
}
}


Blade-Vorlage (youtube-video-uploader.blade.php):





document.addEventListener('livewire:init', () => {
Livewire.on('uploadProgress', event => {
const progress = event[0]?.progress ?? 0;
// init hours, minutes, seconds..
console.log(`[${hours}:${minutes}:${seconds}] uploadProgress event:`, progress);
});
});

Top