async/await a rekurencja

0

Hej zrobilem sobie rekurencyjna async metode ktora ma wyprodukowac na koncu obiekt, ktory na zwrocic do jakiejs zmiennej a ktora grzecznie czeka na wykonanie calego kodu. Niestety zwraca undefined:/

 let a = await this.prepareToGetJson(pairsString);
        console.log(a);

    async prepareToGetJson(pairsString)
    {
        if(count < 4)//pairsString.length)
        {
            let json =  await utils.getOrderBook(address, pairsString[count] + "/10");//pairsString + "/10");
            for(let i = 0; i < json.Data.length; i++)
            {
                //buduje sobie jakis obiekt, nie wstawiam kodu zeby nie zaciemniac obrazu, z obiektem wszystko jest ok
                
            }
            count++;
            await this.prepareToGetJson(pairsString);
        }
        else
        {
            return endJson;
        }
            
    }

Wszystko sie ladnie wykonuje, najpierw uruchamia sie else z kodem return endJson, obiuektendJson wyglada tak jak powinien ale cos nie chce sie owy obiekt przypisac do zmiennej a:/ wyskakuje ze a jest undefined, nie mam pojecia czemu:/ Jakies wskazówki?

0

Nie brakuje Ci tam jednego returna?

0

else sie zawsze wykonuje wiec zwraca co mam zwracac gdzie mi tam jeszcze return potrzebny;]

0

Nie - return wykonuje się tylko w przypadku gdy count < 4, masz to przecież wprost w kodzie napisane.
Dla count >= 4, funkcja nigdy nic nie zwraca, stąd undefined.

0

if count < 4 zrob cos tam else zrob cos innego. Dla każdego innego przypadku poza count < 4 wykonuje sie else również dla przypadku count == 4 lub count > 4, zle zakladam?

Dziwne faktycznie jak napisalem tak:

if(count < 4)//pairsString.length)
{
    //jakis kod
count++;
            await this.prepareToGetJson(pairsString);
}
else
        {
            return endJson;
        }
           return endJson; 

to dziala tylko w takim wypadku nie potrzebny mi else i funkcja ma zawsze cos zwrocic

1

Załóżmy, że mamy count = 2:

    async prepareToGetJson(pairsString)
    {
        if(count < 4) // sterowanie wchodzi do tego ifa
        {
            let json = /* ... */; // wykonuje się ta linijka
            for (let i = 0; i < json.Data.length; i++) // wykonuje się ta pętla
            {
                /* ... */
            }
            count++; // wykonuje się ta linijka
            await this.prepareToGetJson(pairsString); // wykonuje się ta linijka
        }
        else
        {
            return endJson; // ta linijka się NIE wykonuje podczas tego konkretnego wywołania funkcji, ponieważ `count = 2`
        }

        // sterowanie wychodzi z if'a - funkcja zwraca "undefined", ponieważ nie ma żadnego "return"a;
        // nawet jeśli INNE wywołania funkcji mają returna, ta jedna, konkretna ścieżka nie ma żadnego.
    }
0

smiga, dzieki za odpowiedz. Nie do konca rozumiem czemu to dziala, czemu metoda za kazdym razem musi zwracac konkretny, niepelny obiekt ale to pewnie jest zwiazane z tym ze moj wczesniejszy jezyk nie byl asynchroniczny :>

Dzieki wielkie Patryk :)

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