不熟悉的语法,TypeScript,Promises

时间:2017-12-14 20:27:16

标签: typescript promise

我正在努力理解GitHub上的Angular Google Maps (AGM) Library,特别是lazy-map-api-loader.ts文件中的特定部分:

this.promise = new Promise<void>((resolve: Function, reject: Function) => {
  (<any> window)[callbackName] = () => { // I've simplified this line a bit.
    resolve();
  };

  script.onerror = (error: Event) => {
    reject(error);
  };
});

最终,上述承诺将返回给此方法的调用者;但是,我不理解的部分是上面看到的强制转换(?)(<any>window)[callbackName] =语法。

看起来就像试图访问window对象上的特定属性(名称等同于callback的值)并将属性分配给函数将resolve发现函数匿名定义的承诺。

但是,从我所看到的,分配给该属性的函数永远不会在存储库中调用。

上面发生了什么?

1 个答案:

答案 0 :(得分:2)

<div id="template-example" style="display:none;"> <div>Foo: {bar}</div><div>Blah: {vtha}</div> </div>仅用于避免任何属性访问问题,因为<any>上实际上不存在回调名称。使用括号语法是因为window是变量。

这与:

相同
callbackName

...但是如果你没有强制转换为this._windowRef.getNativeWindow().angular2GoogleMapsLazyMapsAPILoader ,这会导致类型错误。我的猜测是any被使用,因为它更容易输入并且多次使用。

至于实际调用的时间,See the script tag construction会导致某些内容

callbackName

一旦脚本完成加载,Google API本身就会调用此回调函数。该属性需要存在于<script src="https://googleapis.com/maps?callback=angular2GoogleMapsLazyMapsAPILoader"</script> 上才能被调用。