我是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;
}
在chrome和Firefox上结果:我可以看到所有日志但在IE11上我只看到“Inside executeSomething”,这意味着问题在于创建承诺。
我认为这是因为IE11不支持es6,但我使用蓝鸟获得相同的结果,我希望有些可以为我的问题带来一些启示。
答案 0 :(得分:8)
您需要在页面中包含一个promise polyfill,以便IE11正常工作。
您使用es-promise的直觉是正确的,但您还需要在html中包含.js
文件
<script src="path/to/es6-promise.js"></script>
.d.ts
文件将为TypeScript编译器提供定义,但不会影响运行时。您仍然需要在您的html中包含polyfill,以便它实际在浏览器中运行。
使用TypeScript或任何编译语言时要记住的最重要的事情是编译时间和运行时间之间的区别。
.d.ts
,.ts
,.tsx
等等。所有编译时间文件。这意味着这些文件不是实际执行的文件,而是生成运行时代码的文件。
.js
个文件是运行时文件。这些是浏览器运行的文件。
.d.ts
个文件不包含代码,而是代码签名的定义,因此始终会附带相应的.js
将在浏览器中运行的文件。