Получить polyfill для чистого JavaScript - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть файл Javascript, в котором код написан в стандартах Javascript ES6. Файл отлично работает в Chrome, но не работает в IE.После выполнения логов я обнаружил, что проблема заключается в совершении вызовов ajaxСледующий код - это место, где я пытаюсь совершать звонки:

var response = await fetch(url, xhrRequestObject);
        if (response.ok) {
            var jsonResponse = await response.json();
            return jsonResponse;
        }

Я перебрал и нашел несколько полифиллов, чтобы исправить эту проблему. Но я не понимаю, как использовать эти полифилы в чистом файле JavaScript.

Любые предложения о том, как использовать эти polyfills в чистом файле js?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Невозможно заполнить новые синтаксические функции, такие как ключевое слово "await", которое вы здесь используете.

Вместо этого лучше всего использовать такой транспайлер, как Babel .Транспортер берет ваш современный код и пытается сделать его исполняемым в старых версиях браузера.Я не уверен, поддерживает ли Babel async / await, и переносимый код является исполняемым в IE.

0 голосов
/ 18 ноября 2018

Не могу поверить, что я не упомянул использование 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();
});

Обратите внимание, что вызывающая сторона должна обрабатывать ошибки в возвращаемом обещании.

...