SerweryWłasny serwerDla twórcówForumFAQDokumentacjaBezpieczeństwo
Pobierz launcher
  1. Dokumentacja
  2. Funkcje wspólne
  3. async

Funkcja

async

Serwer i klientTimeryTylko Trilogy Hub

Uruchamia funkcję jako zadanie (korutynę). Kod w zadaniu biegnie od razu, aż do pierwszego czekania (sleep, await, waitForEvent). Wtedy oddaje sterowanie, a serwer i gra działają dalej. Gdy czekanie się skończy, zadanie rusza od miejsca, w którym stanęło. Dzięki temu kroki rozłożone w czasie (odliczanie, zapytanie do bazy, odpowiedź HTTP, czekanie na gracza) piszesz po kolei, bez zagnieżdżonych callbacków i timerów.

Składnia

task async(function fn [, var ...])

Argumenty

fnfunction
Funkcja zadania.
...var, opcjonalny = nil
Argumenty przekazane do funkcji.

Zwraca

Zadanie (sprawdzisz je przez getTaskStatus), albo false przy złym argumencie.

Przykład

addCommandHandler("odliczanie", function(player)
    async(function()
        for i = 3, 1, -1 do
            outputChatBox(i .. "...", player)
            sleep(1000)
        end
        outputChatBox("Start!", player)
    end)
end)

Uwagi

Zadanie należy do zasobu. Timery i uchwyty, na które czeka zadanie, należą do zasobu, który je uruchomił. Zatrzymanie zasobu kończy więc także jego czekające zadania.

Błąd w zadaniu nie wywraca skryptu. Trafia do konsoli jako async: ..., a zadanie dostaje stan failed. Kod, który nie oddaje sterowania przez 5 sekund, zostaje przerwany (ochrona przed nieskończoną pętlą). Po stronie klienta nie liczy się czas, w którym funkcja czeka na grę (np. pod ekranem ładowania przy wejściu na serwer).

Zobacz też