Во-первых, вы должны вернуть свой запрос на выборку в своем Promise.
Также, возможно, я ошибаюсь, но эта обработка ошибок очень необходима:
}, error => onFailure({error})
У вас уже есть:
).catch(e => onFailure(e))
Я думаю, что вы можете проверить это так:
const get = (query: Query) => {
return new Promise((resolve, reject) => {
//Is query.url() a request ? it can be the one which failed also.
return fetch(query.url(), {
method: 'GET',
headers: new Headers(),
mode: 'no-cors'
})
.then(response => {
if (!response.ok) {
throw Error(response.statusText)
}
return resolve(response.json())
})
.catch(e => reject(e))
})
// And also if the child request failed, your parent Promise will fail so you have to catch it well
.catch(e => {console.log(e)})
}
РЕДАКТИРОВАТЬ: Я что-то забыл, если вы используете throw
в обратном вызове ребенка, это не будет работать наверняка каждый раз, так что, возможно, .catch
после throw
никогда не вызывается, попробуйте использовать reject
вместо throw
.
Например:
const get = (query: Query) => {
return new Promise((resolve, reject) => {
//Is query.url() a request ? it can be the one which failed also.
return fetch(query.url(), {
method: 'GET',
headers: new Headers(),
mode: 'no-cors'
})
.then(response => {
if (!response.ok) {
reject(response.statusText)
}
return resolve(response.json())
})
.catch(e => reject(e)) //the catch will be triggered
})
// And also if the child request failed, your parent Promise will fail so you have to catch it well
.catch(e => {console.log(e)})
}
Если вы есть вопросы, не стесняйтесь. Надеюсь, это поможет вам ^^