Javascript 从AMD回调返回值

Javascript 从AMD回调返回值,javascript,asynchronous,requirejs,amd,arcgis-js-api,Javascript,Asynchronous,Requirejs,Amd,Arcgis Js Api,我正在使用ArcGIS javascript api,它基于require和异步模块定义构建。要创建映射,请在AMDrequire语句的回调中定义所有操作: 需要([ “esri/Map”, “esri/views/MapView” ],功能(地图、地图视图){ 常量映射=新映射({…}) const view=新映射视图({…}) }) 我希望能够通过另一个模块的命令初始化此行为,以及访问AMD回调中定义的map和view对象。为了能够初始化此on命令,我可以将其包装到函数中,然后导出该函数

我正在使用ArcGIS javascript api,它基于
require
和异步模块定义构建。要创建映射,请在AMD
require
语句的回调中定义所有操作:

需要([
“esri/Map”,
“esri/views/MapView”
],功能(地图、地图视图){
常量映射=新映射({…})
const view=新映射视图({…})
})
我希望能够通过另一个模块的命令初始化此行为,以及访问AMD回调中定义的
map
view
对象。为了能够初始化此on命令,我可以将其包装到函数中,然后导出该函数:

export const makeMap=()=>{
需要([esri模块]、功能(映射、映射视图){
map=新映射({…})
视图=新地图视图({…})
})
}
我可以将
makeMap
导入代码中的其他模块,并调用它。这是很好的工作。但是,我正在试图弄清楚如何访问
映射
视图
对象,以便能够通过UI对它们进行操作。首先,我尝试了这个:

//mapMap.js
导出常量makeMap=()=>{
让mapInstance;
让viewInstance;
需要([esri模块]、功能(映射、映射视图){
map=新映射({…})
视图=新地图视图({…})
mapInstance=map
viewInstance=view
})
返回{maInstance,viewInstance}
}
//其他模块
从“/makeMap”导入{makeMap}
const{mapInstance,viewInstance}=makeMap()
这显然不起作用-
maInstance
viewInstance
未定义,因为在AMD回调中定义它们的函数在从
makeMap()调用返回后运行

我不确定如何从AMD回调中获取返回值。这可能吗?我需要另一种范式吗

我尝试的另一件事是传入一个引用持有者对象,将引用应用于该对象,然后在需要时从那里检索它们。它能工作,但我觉得它没有那么干净:

//maprefs.js
导出常量maprefs={}
//makeMap.js
从“./maprefs”导入{maprefs}
导出常量makeMap=(maprefs,mapname)=>{
需要([esri模块]、功能(映射、映射视图){
map=新映射({…})
视图=新地图视图({…})
maprefs[mapname]={map,view}
})
}
//某模块
从“./maprefs”导入{maprefs}
从“/makeMap”导入{makeMap}
makeMap(maprefs,“map1”)
someButton.addEventListener('单击',()=>{
//maprefs.map1被正确地定义为{mapInstance,viewInstance},我可以对其执行操作
maprefs.map1.doSomething
})
我看了一下,这是关于从ajax调用中重新调整值的,但我很难将其与AMD回调联系起来


是否可以从AMD回调返回用于其他地方的值?我希望使用
const{map,value}=makeMap()
类型语法。

在您提到的场景中,我认为最好的解决方案是使用
esri loader
。是ESRI为此目的构建的一个小型库,即在运行时加载ArcGIS JS API库模块


这非常完美,因为我正计划将这一切构建到react应用程序中。非常感谢。很高兴它能帮助你!!