对不受支持的浏览器的承诺

时间:2018-02-11 11:31:23

标签: javascript android es6-promise

我的网页可能被某些旧浏览器加载(特别是在带有WebView的Android应用程序中,可能仍会被一些相当旧的设备使用)...不是很多,所以我不想去要完全支持它们太麻烦了,但我至少要加载页面。因此,我宁愿不依靠转发器等来支持完全向后兼容的所有内容。

那么如何制作我的代码"安全"在旧版浏览器上使用?我的代码中使用promises的那些部分是" optional"从某种意义上说,如果它们不可访问,那么该页面仍将是有用的。因此,我希望能够在我的代码中包含承诺,而不会破坏旧浏览器的内容。

是否足以将这些部分放入支票承诺支持,例如if (window.Promise) { myPromise = getMeAPromise(); mPromise.then(...).catch(...); },以便解释器永远不会到达这些部分?或者是否存在仍会导致在不受支持的浏览器上失败的编译过程?

1 个答案:

答案 0 :(得分:4)

只要您以不会失败的方式测试支持,您就不必担心。您的if (window.Promise)符合该定义,但如果是我,我会使用if (typeof Promise !== "function")。所以也许:

var hasPromiseSupport = typeof Promise === "function";

...然后if (hasPromiseSupport)围绕可选位。

所有这些都说:有完整的Promise polyfills可用,所以你可以有条件地包含一个:

if (typeof Promise !== "function") {
    document.write('<script src="some-promise-polyfill.js"><\/script>');
}

......然后你就有了承诺。 (是的,在我看来,这是document.write剩余的有效用例。)