Rozwinięcie Promise'a

0

Dzień dobry,

napisałem sobie krótką funkcję która powinna wyświetlić dane pobrane z bazy MYSQL. Niestety podczas wyświetlania danych za pomocą funkcji alert zamiast oczekiwanej wartości otrzymuje tylko tekst [object Promise]. Co mogę poprawić w poniższym kodzie?

async function kontrola_imie_nazwisko(imie,nazwisko)
{
 let wynik =  await axios.get("http://192.168.1.4:3333/pobierz_dane)
 return wynik;
}

alert(kontrola_imie_nazwisko());
1

Żeby wywołać funkcję asynchroniczną w react to musisz ją umieścić między innymi w hooku useEffect, albo w jakimś zdarzeniu np onClick

Edit:

Jeśli faktycznie korzystasz z reacta to najlepiej jakbyś wrzucił przykładowy komponent pokazujący jak próbujesz wywołać tą metodę asynchroczniczną w tym komponencie, bo dokładna odpowiedź może się różnić w zależności od tego jak masz to u siebie rozwiązane.

3

zły tytuł, to nie ma nic wspólnego z React, tylko z tym, jak działają funkcje asynchroniczne JavaScript.

Ogólnie async/await to cukier składniowy na promisy. Tutaj @szok dobrze pisze - Poczytaj o acync/await i jak sie z tego korzyszta. (jeszcze przed polecam co to są Promise w JS) . Ogólnie warto popracować na samych promisach (używając then i dopiero później przejść na await)

Niestety podczas wyświetlania danych za pomocą funkcji alert zamiast oczekiwanej wartości otrzymuje tylko tekst ,,[object Promise]".

Dokładnie tak ma działać async/await. Każda funkcja async zwróci ci obiekt Promise.
Gdzie Promise jest pewnym pudełkiem na wartość, która jeszcze się nie zrealizowała. A await oraz .then() to sposób na przeczekanie i wydobycie wartości z pudełka.

async function foo() {} // funkcja nie musi nic robić nawet, byleby miała `async`.

console.log(foo()); // wyświetli ci, że jest to Promise

I teraz. Co zrobić, żeby uzyskać wartość z Promise?

  1. .then()
  2. await

czyli robisz np.

kontrola_imie_nazwisko().then(value => {
   console.log(value);
})

albo robisz await:

(async () => {
    console.log(await kontrola_imie_nazwisko());    
})();
1

Twój kod powinien wyglądać jakoś tak:

async function run() {
  alert(await kontrola_imie_nazwisko());
}

function kontrola_imie_nazwisko(imie,nazwisko) {
 return axios.get("http://192.168.1.4:3333/pobierz_dane");
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1