有没有人知道,使用Modernizr或其他方法,是否有办法检测是否在浏览器中启用了Promise功能?
我有一个polyfill用于功能,但只想在浏览器没有本机实现的情况下应用它。
答案 0 :(得分:35)
2016年12月11日更新:所有常绿版本的浏览器现在都支持承诺。它们可以安全使用。
更新2016年11月14日: Chrome,Firefox,Safari和IE现在都在其开发频道中实现了承诺的实验性支持。规范已经解决。我现在仍然不会依赖于实现并使用库,但这可能会在几个月后发生变化。
没有浏览器以可靠的方式原生支持promises。规范可能会改变 - 至少再持续几个月。我的建议是使用像Bluebird这样的快速承诺库。
如果要检查是否启用了本机承诺 - 您可以执行以下操作:
if(typeof Promise !== "undefined" && Promise.toString().indexOf("[native code]") !== -1){
//here
}
正如其他人所建议的,只是检查是否有Promise
对象可以由if(Promise)
完成,但我强烈反对它,因为不同的库有不同的API来创建承诺等。
答案 1 :(得分:13)
抛出当"承诺"未定义:
if (Promise)
// do code
从不抛出:
if (window.Promise)
// do code
是的,可以在浏览器环境中依赖窗口对象。
答案 2 :(得分:3)
您可以尝试在try/catch
块中创建一个:
var promiseSupport = false;
try {
var promise = new Promise(function (x, y) {});
promiseSupport = true;
} catch (e) {}
检查promiseSupport
以查看它是否失败。
<强> JSFiddle 强>
答案 3 :(得分:2)
创建“支持”标志而不携带对象引用:
var canPromise = !! window.Promise;
答案 4 :(得分:0)
以下是列出Promise的浏览器和运行时支持的页面:https://kangax.github.io/compat-table/es6/
答案 5 :(得分:-3)
if (Promise) {
alert("Promise is supported!");
} else {
alert("Promise is not supported!");
}