我已经开始将我们的 ArcGis JS 模板集成到我们正在使用的 webpack 构建管道中。
为了实现这一点,我们需要稍微重构一下 quiet 并需要开始使用 Esri-Loader ( https://github.com/Esri/esri-loader ),它本质上将 dojos 的 require 函数包装到一个 Promise 中。
一个非常简单的示例如下所示:
start = () => {
return EsriLoader.loadModules(['esri/Map', 'esri/views/MapView', "esri/Basemap"])
.then(([Map, MapView, Basemap]) => {
const map = new Map({
basemap: "streets"
});
const view = new MapView({
map: map,
container: "map"
});
});
}
起初我尝试编写这样的调用.then()
:.then((Map, MapView, Basemap) => { ... }
,但收到以下编译器错误:
'(Map: any, MapView: any, Basemap: any) => void' 类型的参数不可分配给 '(value: any[]) => void | 类型的参数 许诺”。
好的,所以签名不加起来:
function loadModules(modules: string[], loadScriptOptions?: ILoadScriptOptions): Promise<any[]>;
所以正确的方法是像上面这样:.then(([Map, MapView, Basemap]) => { ... }
而此时我的理解已经到了极限。在下面的方法主体中,我可以调用它们的名字Map
,MapView
而BaseMap
我希望这是一个数组,我必须像 javascript-ish 一样访问它Arguments[0][0]
,Arguments[0][1]
依此类推,因为我确实只传入了一个对象类型Array<any>
。
请向我解释为什么以及如何做到这一点,或者我在这里做错了什么。