0

我有一些代码,异步调用谷歌地图:发现通过与谷歌地图API的回调来传递信息的好方法

var directionsService = new google.maps.DirectionsService; 
directionsService.route(arg1, callback); 
directionsService.route(arg2, callback); 
directionsService.route(arg3, callback); 

function callback(response, status) { 
    // complex function here 
} 

眼下在单件的每个数据回调的结果存储在一个全局变量。设计有所增加,现在我想在每个回调中包含一个参数。但我不能直接这样做,因为我不控制directionsService.route。这也让我觉得这已经是解决问题的一种迂回方式;我宁愿将arg1, arg2, arg3及其参数传递给一个可以处理异步内容并在所有内容都返回时清理的函数。关于什么是最好的方式去做这件事的任何建议?

我可以通过添加另一个全局并在调用之间更新它来深入挖掘我的洞。我可以为directionsService.route编写一个封装器,将它封装在另一个回调间接层中。我可以尝试将回调格式强制转换为像async这样的库所需的匹配。我可以编写几个版本的回调函数,或者用函数发生器替换它。这些选项是否合理?有什么更好的吗?

老实说,这是一个小项目,我不需要一些可以很好地扩展的东西,但仅仅为了我自己的安心,我想要一些不好的东西,有点干。

回答

1

我写了一个简单的代码巫婆调用一个事件与回调函数。当事件发送时,你只需要一个简单的eventListener,以及你想要的任何参数,女巫称你的大功能。

这是我的代码:

var directionsService = new google.maps.DirectionsService; 

// Listen for the event. 
var aParameter = 35; 
window.addEventListener('build', function (e) { console.log("OK EVENT. With a prameter: " + aParameter); /* Now, call a function with parameters:*/ aFunction (aParameter); }, false); 

directionsService.route(arg1, callback); 

function callback() { 
    console.log("OK CALLBACK."); 
    var event = new Event('build'); 
    // Dispatch the event. 
    window.dispatchEvent(event); 
} 

function aFunction (parameter) { 
    console.log (parameter); 
} 

您也可以调度的事件与参数,如用状况:

var event = new CustomEvent('build', { detail: elem.dataset.time }); 

function eventHandler(e) { 
    console.log('The time is: ' + e.detail); 
} 

咨询MDN page有关事件。

告诉我,如果你有一些问题。