#javascript #jquery #promise
#javascript #jquery #обещаю
Вопрос:
У меня есть следующая служебная функция, которую я использую как стандартный способ добавления заголовков к HTTP-запросу GET.
const get1 = function(url, callback) {
console.log("in get1 with url : " url);
return new Promise(function(resolve, reject) {
firebase.auth().currentUser.getIdToken()
.then(function(idToken) {
return {
'Authorization': 'Bearer ' idToken,
'ACTING_ON_BEHALF_OF': ns.actingAs
};
})
.then(function(headers) {
resolve($.get({
url: url,
headers: headers,
dataType: "json",
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
alert(errorThrown);
alert(jqXHR.responseText);
}
}));
});
});
};
Я вызываю его со структурами, похожими на это
const targetUrl = ns.operation "/" ns.stage "/" ns.category;
utils.get1("/api/gameconfig/v1/oddoneout/" targetUrl)
.then(function(data) {
console.log("THEN Block")
// blah blah blah
});
Похоже, это надежно работает во всех браузерах, кроме Safari на iPad, где периодически появляется запрос GET, но .then
блок никогда не вводится.
Отладка javascript, похоже, указывает на то, что HTTP-запрос все еще выполняется, но серверная сторона, похоже, считает, что она успешно выполнила запрос и вернула ответ.
Я в недоумении, почему я вижу такое поведение. Похоже, что в этом нет никакой закономерности. Иногда я могу без проблем выполнить 50 вызовов, иногда это происходит более или менее мгновенно.
Любая помощь будет принята с благодарностью, даже если это подсказки о том, как это отладить.
Я использую jQuery 3.3.1, если это имеет какое-либо значение.
Комментарии:
1. Добавьте обработчик ошибок и посмотрите, в чем заключается ошибка.
2. @epascarello: не будут ли вызываться предупреждения в функции ошибок, если произошла ошибка?