Я делаю простой запрос, используя 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