Отсутствует параметр в обратном вызове, когда я использую обещание в JavaScript - PullRequest
1 голос
/ 26 января 2020

Я делаю простой запрос, используя jQuery.get() ( версия jQuery 3.x ) с обещанием, передающим два параметра ( id , error ), поэтому, когда я обрабатываю reject с помощью callBack, кажется, что ошибки исчезают, а когда я использую console.log(errors), он показывает undefined .

То, что я пытаюсь сделать, это сделать запрос к API Звездных войн (раздел людей), поэтому, если я получу 2 или более ошибок, я прерву рекурсию и покажу сообщение в консоли, но если произошла только одна ошибка, она должна продолжаться со следующего символа.

Я думаю, что я передаю параметры правильно, поэтому кто-то может объяснить мне, где я ошибаюсь ?

Вот мой код:

const URL_API = 'https://swapi.co/api'
const PEOPLE_URL_API = '/people/'

const CHARACTERS = `${URL_API}${PEOPLE_URL_API}`
const options = { crossDomain: true }

let i = 0
let errors = 0

function getCharacterName(id, errors) {
    return new Promise((resolve, reject) => {
        $
            .get(`${CHARACTERS}${id}`, options, (data) => {
                resolve(data)
            })
            .fail(() => reject(id, errors))
    })
}

// CallBack that will handle a possible error
const onError = (id, errors) => {
    console.log(id, errors)
    errors++
    if (errors < 3) {
        console.log(`We coudn't find the character ${id}`)
        recursive(i, errors)
    } else {
        console.log(`Too much errors, we can't continue`)
        console.log(errors)
    }
}

function recursive(i, errors) {
    i += 1
    getCharacterName(i, errors)
        .then((data) => {
            console.log(
                `I'm the character ${data.url
                    .substring(28)
                    .replace('/', '')}, my name is: ${data.name}`
            )
            console.log(i, errors)
            return recursive(i, errors)
        })
        .catch(onError)
}

recursive(i, errors)

Итак, после запуска этого я получаю что-то вроде этого в консоли:

...
I'm the character 16, my name is: Jabba Desilijic Tiure
16 0
swapi.co/api/people/17/?crossDomain=true:1 GET https://swapi.co/api/people/17/?crossDomain=true 404
17 undefined
Too much errors, we can't continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...