我在我的节点js应用程序中有这个功能。我给出了用户在纬度和经度上的位置,半径和要搜索的关键字。我已经使用了一个名为googleplaces的节点模块将这些值传递给GooglePlace API。
function placesRequest(radius, lat, lon, keyword){
var conductor = new googlePlaces(googlePlacesAPIKey, "json");
var parameters = {
radius: radius,
location:[lat, lon],
types:"restaurant",
query:keyword
};
conductor.placeSearch(parameters, function(error, response) {
if (error) throw error;
console.log(response.results) //for debugging
if(response.status=="ZERO RESULTS") return "{results:0}";
return response.results;
});
}
我对节点js还是比较新的,我一直在研究如何模块化这些功能,但我并不完全确定它是如何工作的。我得到的最远的是分别重写功能。有没有快速检索 response.results 数据的方法,还是应该只是卷曲请求?
答案 0 :(得分:0)
您需要为placesRequest提供回调才能获得结果:
function placesRequest(radius, lat, lon, keyword, callback){
var conductor = new googlePlaces(googlePlacesAPIKey, "json");
var parameters = {
radius: radius,
location:[lat, lon],
types:"restaurant",
query:keyword
};
conductor.placeSearch(parameters, function(error, response) {
/*
Consider passing the error to the callback
if (error) throw error;
console.log(response.results) //for debugging
if(response.status=="ZERO RESULTS") return "{results:0}";
*/
callback(response.results);
});
}
所以你像这样调用placesRequest:
placesRequest(1,2,3,'abc', function (results) {
// do something with the results
});
是的,它很难看,当你明星依赖于多次回归时它会变得复杂。但是对于很多情况来说还不够。
对于复杂的情况,您可以使用一些抽象,例如:
答案 1 :(得分:0)
我找到了解决方案,但我应该更多地提及该项目,以保证解决方案。上面提到的功能是一个简单的地方搜索应该:
取用户输入(纬度,经度,半径,关键字)
将这些值传递给Google地方
返回Google返回的数据
然后,收到的数据将作为http响应发送到初始http请求,该请求将提供所需的所有数据。由于应用程序的性质,它需要处理不同的请求类型(地图搜索,用户配置文件编辑等),因此我实现了一个单独的功能,其中包含一个switch case。
解决方案:
从函数中取出switch case并将其插入到运行http服务器的函数中。然后,获取placesRequest函数并将其放入switch case中,然后从那里写入响应。这不是最漂亮的解决方案,但它确实有效。