Funkcja
dbPoll
Odbiera wynik zapytania z dbQuery: wiersze, liczbę zmienionych wierszy i ID ostatnio wstawionego. Jeśli chcesz po prostu wykonać zapytanie i dostać wiersze, prościej użyć dbFetch.
Składnia
table dbPoll(element queryHandle [, int timeout = 0])Argumenty
queryHandleelement- Uchwyt z
dbQuery. timeoutint, opcjonalny = 00- nie czekaj (zwracanil, gdy wyniku jeszcze nie ma),-1- czekaj, aż baza odpowie, liczba - czekaj najwyżej tyle milisekund.
Różnice względem MTA:SA
- Tych argumentów z MTA:SA tu nie ma:
bool multipleResults = false
W MTA:SA
dbPoll(db-query queryHandle, int timeout, bool multipleResults = false)Zwraca
Tablica wierszy (każdy wiersz to tablica kolumna = wartość), liczba zmienionych wierszy i ID wstawionego. Te same dwie liczby są też w samej tablicy: rows.affectedRows i rows.insertId. nil, gdy wynik jeszcze nie jest gotowy, false z kodem i opisem błędu, gdy zapytanie się nie udało.
Przykład
dbQuery(function(q)
local rows, err, msg = dbPoll(q, 0)
if not rows then
print("Błąd bazy: " .. tostring(msg))
return
end
for _, row in ipairs(rows) do
print(row.serial, row.kasa)
end
end, db, "SELECT serial, kasa FROM gracze ORDER BY kasa DESC LIMIT 10")
Uwagi
Czekanie w async nie zatrzymuje serwera. Wewnątrz async(function() ... end) czekanie dbPoll(q, -1) wstrzymuje tylko to zadanie, a gra i inne skrypty działają dalej. Poza zadaniem serwer stoi, dopóki baza nie odpowie, a przy dłuższym czekaniu dostaniesz ostrzeżenie w konsoli.
Zobacz też
dbFetchWykonuje zapytanie i od razu zwraca wynik. Jedno wywołanie zamiastdbQuery,dbPollidbFree. Działa z SELECT, INSERT, UPDATE i DELETE.dbQueryWysyła zapytanie z wynikiem. Wynik odbierasz przezdbPollalbo w funkcji zwrotnej, która dostanie uchwyt zapytania.asyncUruchamia 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.