Typescript 和 Azure POI 值
Type script and Azure POI values
我是 React/Type 脚本的新手
试图找出如何为我的 return 语句访问变量 data2 的值
如何将结果添加到集合中并使整个集合在块外可用。所以也许像一个数据源集合。
希望能够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
'outside'之后的控制台日志语句将没有数据,因为数据尚未加载。调用任何服务都是一个异步过程。 Azure Maps 使用承诺 (then) 作为在服务响应时通知你的方式。您当前的代码正在尝试 return 同步数据,这永远不会发生。如果您尝试进行提取调用(完全相同的主体),情况也是如此。你可以做的是让你的函数 return 有一个承诺,然后在你用来调用这个函数的代码中,相应地处理它,或者在“then”函数中添加你的 post 处理代码。
一种方法是在“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.
});
};
- JavaScript(以及大多数编程语言)中的函数只能return 一个结果。如果您想 return 多个结果,您需要将它们包装到一个对象中。例如:
return {
data2: data2,
dataSource: dataSource
};
我是 React/Type 脚本的新手
试图找出如何为我的 return 语句访问变量 data2 的值
如何将结果添加到集合中并使整个集合在块外可用。所以也许像一个数据源集合。
希望能够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
'outside'之后的控制台日志语句将没有数据,因为数据尚未加载。调用任何服务都是一个异步过程。 Azure Maps 使用承诺 (then) 作为在服务响应时通知你的方式。您当前的代码正在尝试 return 同步数据,这永远不会发生。如果您尝试进行提取调用(完全相同的主体),情况也是如此。你可以做的是让你的函数 return 有一个承诺,然后在你用来调用这个函数的代码中,相应地处理它,或者在“then”函数中添加你的 post 处理代码。
一种方法是在“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.
});
};
- JavaScript(以及大多数编程语言)中的函数只能return 一个结果。如果您想 return 多个结果,您需要将它们包装到一个对象中。例如:
return {
data2: data2,
dataSource: dataSource
};