Typescript 和 Azure POI 值

Type script and Azure POI values

我是 React/Type 脚本的新手

  1. 试图找出如何为我的 return 语句访问变量 data2 的值

  2. 如何将结果添加到集合中并使整个集合在块外可用。所以也许像一个数据源集合。

  3. 希望能够return dataSource 集合到调用函数。

     const getAllLocations = (query: string): GeoJSON.FeatureCollection<GeoJSON.Point> => {
         let data2: GeoJSON.FeatureCollection<GeoJSON.Point> = {};
         let dataSource = {};
         searchURL
           .searchPOI(atlasService.Aborter.timeout(10000), query, {
             maxFuzzyLevel: 4,
             view: "Auto",
           })
           .then((results) => {
             data2 = results.geojson.getFeatures();
             console.log("inside");
             console.log(data2);
             dataSource.Add(data1);
           });
         console.log("outside");
         console.log(data2);
         console.log(datasource);
         return data2, datasource;  // Both these are empty
     };
    

不确定代码中数据源的用途。您将 data1 添加到其中,但在您的代码中未定义。请注意,Azure Maps 中有一个 DataSource class 用于地图。如果你想使用它,你应该在函数之外创建它并重用它。这是一个很好的例子:https://azuremapscodesamples.azurewebsites.net/index.html?sample=Load%20POIs%20as%20the%20map%20moves

  1. 'outside'之后的控制台日志语句将没有数据,因为数据尚未加载。调用任何服务都是一个异步过程。 Azure Maps 使用承诺 (then) 作为在服务响应时通知你的方式。您当前的代码正在尝试 return 同步数据,这永远不会发生。如果您尝试进行提取调用(完全相同的主体),情况也是如此。你可以做的是让你的函数 return 有一个承诺,然后在你用来调用这个函数的代码中,相应地处理它,或者在“then”函数中添加你的 post 处理代码。

  2. 一种方法是在“then”函数中将其添加到数据源中。将其添加到此处后,它将在您的应用程序的其余部分中可用。例如:

const getAllLocations = (query: string): GeoJSON.FeatureCollection<GeoJSON.Point> => {
     let data2: GeoJSON.FeatureCollection<GeoJSON.Point> = {};

     searchURL
       .searchPOI(atlasService.Aborter.timeout(10000), query, {
         maxFuzzyLevel: 4,
         view: "Auto",
       })
       .then((results) => {
         data2 = results.geojson.getFeatures();
         console.log("inside");
         console.log(data2);
//Do something with the response. 
       });
 };
  1. JavaScript(以及大多数编程语言)中的函数只能return 一个结果。如果您想 return 多个结果,您需要将它们包装到一个对象中。例如:
return {
    data2: data2,
    dataSource: dataSource
};