web-dev-qa-db-ja.com

IE11で動作しない約束

私はJavaScriptで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;      
}

Results: on chrome and Firefox私はすべてのログを表示できますが、IE11では「Inside executeSomething」しか表示されません。これは問題がpromiseの作成中にあることを意味します。

IE11がes6をサポートしていないためだと思いましたが、bluebirdを使用しても同じ結果が得られました。

12
Moy

IE11を機能させるには、ページにプロミスポリフィルを含める必要があります。

Es-promiseを使用する本能は正しいですが、HTMLに.jsファイルも含める必要があります

<script src="path/to/es6-promise.js"></script>

.d.tsファイルは、TypeScriptコンパイラにその定義を提供しますが、ランタイムには影響しません。ブラウザーで実際に実行するには、HTMLにポリフィルを含める必要があります。

TypeScriptまたはコンパイルされた言語を使用するときに覚えておくべき最大のことは、compile時間とrun時間の違いです。

.d.ts.ts.tsxなど。すべてcompileタイムファイルです。つまり、これらは実際に実行されるファイルではなく、ランタイムコードを生成するファイルです。

.jsファイルはruntimeファイルです。これらは、ブラウザによって実行されるファイルです。

.d.tsファイルにはコードが含まれていませんが、コードの署名の定義であるため、常にを伴う必要がありますブラウザで実行される対応する.jsファイル。

9
SnareChops