javascript - 在不受支持的浏览器上的 promise

标签 javascript android es6-promise

我的网页可能会被一些旧浏览器加载(具体来说,在带有 WebView 的 Android 应用程序中,一些相当旧的设备可能仍在使用它)...不是那么多,所以我不想去太多完全支持它们很麻烦,但我至少希望页面能够加载。所以,我宁愿不求助于转译器等来支持所有完全向后兼容的东西。

那么如何让我的代码在旧版浏览器上“安全”使用呢?我的代码中使用 promises 的那些部分是“可选的”,因为如果它们不可访问,那么该页面仍然可以使用。所以我想要某种方式在我的代码中包含 promises 而不会破坏旧浏览器的东西。

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

最佳答案

只要您以一种在没有支持的情况下也不会失败的方式测试支持,您就不必担心。您的 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>');
}

...然后你就会得到 promise 。 (是的,在我看来,这是 document.write 剩下的一个有效用例。)

关于javascript - 在不受支持的浏览器上的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48731033/

相关文章:

javascript - Mongoose 与 Supertest 的开放连接问题

android - 抽屉导航汉堡图标只有在手动滑动抽屉后才会显示

javascript - 未定义未处理的 Promise Rejection

javascript - 如何将参数作为 Promise 链中 then() 的参数传递给函数,并保留先前解析的值?

javascript - 如何将此字符串转换为普通的 utf-8 字符串

javascript - 使用 reactJs 和 chartjs 绘制饼图

javascript - 使用切换按钮更新存储值

java - GridView onItemClickListener 永远不会被调用

android - 网络(移动 -> Wifi)变化时维护 SocketConnection 的最佳实践

javascript - 重试 promise 直到解决(递归错误太多)