我正在尝试使用 jQuery UI 自动完成功能来制作 Google 自动完成服务的包装器(因为我只想以无法通过 Google API 的方式限制 Google 返回的一些结果)。
假设我有这个代码:
$("#address").autocomplete({
source: function(request, response){
autoCompleteService = new google.maps.places.AutocompleteService();
autoCompleteService.getQueryPredictions({input: request.term }, autocompleteCallback);
//I should somewhere call the "response" object with desired suggestions as arguments
},
minLength: 5,
});
问题是 jQuery UI Autocomplete 迫使我调用“响应”对象(实际上是一个函数),并带有我想向用户显示的建议作为参数。
但是,另一方面,Google API 迫使我定义一个回调函数(在我的例子中是“autocompleteCallback”),它在完成后将请求的建议作为参数提供给它。
当然,我不能在 'autocompleteCallback' 函数中调用 'response' 对象,也不能在此行之后调用响应对象:
autoCompleteService.getQueryPredictions({input: request.term }, autocompleteCallback);
因为 JS 是异步的,所以我不能确定我得到了什么,比如说:我用来传递结果的全局变量。
解决方案是什么?对于这样的问题,是否有众所周知的 JS 设计模式?