Promises 不适用于 IE11

Promises not working on IE11

我是 javascript 上 Promises 的新手,所以我希望有人能帮助我解决这个问题。

问题: Promise 无法在 IE11 上执行,在 Chrome 和 FireFox

上运行良好

使用的框架: 我尝试使用 es6-promise.d.ts 和 bluebird.d.ts 结果相同。

代码:

static executeSomething(): Promise<any> 
{
  console.log("inside executeSomething");
  var test= new Promise((resolve, reject)=>
  {
     console.log("inside Promise");

  }).catch(function(error){console.log("error")}); 
 console.log("after promise"); 
 return test;      
}

结果: 在 chrome 和 Firefox 上我可以看到所有日志但在 IE11 上我只看到 "Inside executeSomething" 这意味着问题是在创建承诺。

我以为是因为IE11不支持es6,但我用bluebird得到了同样的结果,我希望有人能为我的问题带来一些启发。

您需要在页面中包含一个 promise polyfill 才能使 IE11 正常工作。

您使用 es-promise 的直觉是正确的,但您还需要在 html

中包含 .js 文件
<script src="path/to/es6-promise.js"></script>

.d.ts 文件将为 TypeScript 编译器提供它的定义,但不会影响 运行 时间。您仍然需要在您的 html 中包含 polyfill 才能在浏览器中实际 运行。

使用 TypeScript 或任何编译语言时要记住的最重要的事情是 compile 时间和 运行 时间之间的差异.

.d.ts.ts.tsx等都是编译次的文件。这意味着这些不是实际执行的文件,而是生成 运行 时间代码的文件。

.js 文件是 运行time 文件。这些是浏览器 运行 的文件。

.d.ts 文件 包含代码,而是代码签名的定义,因此应该 always相应的 .js 文件将在浏览器中 运行。