Как мне вернуть результат рекурсивной выборки? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть первая асинхронная функция

fetch("https://api.priceapi.com/v2/jobs", {
            body: body,
            headers: {
                "Content-Type": "application/x-www-form-urlencoded"
            },
            method: "POST"
                }).then((response) => {
                            return response.json();
                        }).then((data) => {

                            return fetchRepeat(data.job_id)
                        })

И вторая рекурсивная асинхронная функция.

function fetchRepeat(id){

    fetch("https://api.priceapi.com/v2/jobs/"+ id +"/download.json?token=" + priceapisecret.secret)
    .then((response) => {
        return response.json()
    }).then((data) =>{
        if(data.status == "finished"){

            var bookdata = {
                title: data.results[0].content.name,
                price: data.results[0].content.price
            }

            return bookdata;

        }
        else{
            fetchRepeat(id)
        }
    })
}

Я хочу иметь доступ к книжным данным в первой асинхронной функции.Как мне это сделать?

1 Ответ

1 голос
/ 30 мая 2019

Чтобы говорить о возврате, ваш fetchRepeat должен вернуть обещание. Это не так, возвращая undefined был результат. Последняя then также не возвращала значение рекурсии и, следовательно, также разрешалась до undefined.

Вот рабочая версия:

function fetchRepeat(id) {
    // return the promise
    return fetch(`https://api.priceapi.com/v2/jobs/${id}/download.json?token=${priceapisecret.secret}`)
        .then(response => response.json())
        .then(({ status, results: [{ content: { name: title, price } }] = [{ content: {} }] }) =>
            (status === 'finished' ? { title, price } : fetchRepeat(id))); // return result of recursion
}

Теперь я позволю ESLint обрабатывать форматирование, и, поскольку я использую airbnb, он предпочитает деструктуризацию. Ошибка в последнем then была очевидна, так как ELSint жаловался на последовательный возврат. Я призываю вас использовать линтер и IDE, которые применяют стиль кодирования, чтобы уменьшить количество ошибок в вашем коде и облегчить чтение для других.

...