Не могу поверить, что я не упомянул использование Babel, см. Ответ Марселя Гербера , чтобы узнать больше.
Но если вы не хотите переносить:
Любой fetch
полифилл должен предоставлять или полагаться на Promise
полифилл. Затем, поскольку вы ориентируетесь на IE, вы не можете использовать функции async
и ключевое слово await
, поскольку они были добавлены в ES2018 и не поддерживаются ни одной версией IE.
Таким образом, вместо await
вам придется использовать синтаксис обещания:
fetch(url, xhrRequestObject).
.then(function(response) {
if (!response.ok) {
throw new Error("HTTP error, status = " + response.status);
}
return reponse.json();
})
.then(function(data) {
// ...use `data` here, it's the result of parsing the JSON
})
.catch(function(error) {
// ...handle error here...
});
Или, если вы возвращаете это вызывающей стороне (ваш код предполагает, что вы могли бы быть):
return fetch(url, xhrRequestObject).
.then(function(response) {
if (!response.ok) {
throw new Error("HTTP error, status = " + response.status);
}
return reponse.json();
});
Обратите внимание, что вызывающая сторона должна обрабатывать ошибки в возвращаемом обещании.