如何确定浏览器是否支持Promise

use*_*501 29 javascript browser-detection promise es6-promise

有没有人知道,使用Modernizr或其他方法,如果有办法检测是否在浏览器中启用了Promise功能?

我有一个polyfill用于功能,但只想在浏览器没有本机实现时应用它.

Ben*_*aum 37

2016年12月11日更新:所有常绿版本的浏览器现在都支持承诺.它们可以安全使用.


2016年11月14日更新: Chrome,Firefox,Safari和IE现在都在他们的开发频道中实现了承诺的实验性支持.规范已经解决.我仍然不会依赖于实现,并且会使用库,但这可能会在几个月后发生变化.


没有浏览器以可靠的方式原生支持promises.规范可能会改变 - 至少再持续几个月.我的建议是使用像Bluebird这样的快速承诺库.

如果要检查是否启用了本机承诺 - 您可以执行以下操作:

if(typeof Promise !== "undefined" && Promise.toString().indexOf("[native code]") !== -1){
    //here
}
Run Code Online (Sandbox Code Playgroud)

正如其他人所建议的那样,只是检查是否有Promise对象可以通过if(Promise)但我强烈建议反对它,因为不同的库有不同的API来创建承诺等.

  • 不应该是`typeof Promise!=="undefined"`,因为`typeof`返回一个字符串? (3认同)

Jas*_*ing 13

没那么快.

将引发在"无极"是不确定的:

if (Promise)
  // do code
Run Code Online (Sandbox Code Playgroud)

永远不会抛出:

if (window.Promise)
  // do code
Run Code Online (Sandbox Code Playgroud)

是的,可以在浏览器环境中依赖窗口对象.

  • `Object.defineProperty(window, 'Promise', { get() { throw Error(); }});` (2认同)

Pau*_*oub 6

要创建“受支持”标志而不携带对象引用:

var canPromise = !! window.Promise;
Run Code Online (Sandbox Code Playgroud)