承诺不在IE11上工作

Moy*_*Moy 11 javascript promise typescript bluebird es6-promise

我是javascript上的Promises的新手,所以我希望有些人可以帮我解决这个问题.

问题:承诺不在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;      
}
Run Code Online (Sandbox Code Playgroud)

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

我以为是因为IE11不支持es6,但我使用bluebird得到了相同的结果,我希望有些人可以为我的问题带来一些启示.

Sna*_*ops 9

您需要在页面中包含一个promise polyfill,以便IE11正常工作.

您使用es-promise的直觉是正确的,但您还需要.js在html中包含该文件

<script src="path/to/es6-promise.js"></script>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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