获取纯JavaScript的polyfill

时间:2018-11-18 12:23:21

标签: javascript ecmascript-6 polyfills

我有一个Javascript文件,其中的代码使用Javascript ES6标准编写。该文件在chrome中可以正常工作,但在IE中不起作用。完成日志后,我发现问题在于进行ajax调用。以下代码是我尝试拨打电话的地方:

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

我通过谷歌搜索并找到了一些polyfill来纠正此问题。但是我没有得到如何使用这些不正确的javascript文件的

关于如何在纯js文件中使用这些polyfill的任何建议?

2 个答案:

答案 0 :(得分:3)

无法重新填充新的语法功能,例如您在此处使用的“ await”关键字。

相反,最好的选择是使用Babel之类的编译器。编译器将使用您的 modern 代码,并尝试使其在较旧的浏览器版本中可执行。我不确定Babel是否支持async / await,但是转译的代码是否可以在IE中执行。

答案 1 :(得分:2)

我不敢相信我没有提到使用Babel,有关更多信息,请参见Marcel Gerber's answer

但是,如果您不想转运:


任何fetch填充都必须提供或依赖Promise填充。然后,由于您的目标是IE,因此无法使用async函数和await关键字,因为它们是在ES2018中添加的,并且不受任何版本的IE支持。

因此,您必须使用promise语法而不是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();
});

请注意,调用方需要在返回的诺言中处理错误。