如何为Heremaps geocode方法返回的对象追加自定义记录ID键值对
报错根因
- 你定义的
geoCoder函数没有返回值,调用后返回undefined,因此geoCoder(address)[recId] = recordId操作会触发属性访问错误 - Here Maps的
service.geocode是回调式异步方法,不会同步返回结果,你原来的同步取值逻辑无法拿到异步返回的地址数据 - 你用
await调用coupleGeocodeRecordID,但该方法没有返回Promise,await不会等待异步请求执行完成
修复方案
首先将回调式的geocode封装为返回Promise的方法,待异步请求拿到结果后,直接给每个地址对象追加原始记录ID即可,完整修改后的代码如下:
1. 改造geoCoder为Promise形式
// Call the geocode method with the geocoding parameters, // the callback and an error callback function (called if a // communication error occurs): const geoCoder = address => { return new Promise((resolve, reject) => { try { service.geocode( { q: address }, result => resolve(result.items), // 成功返回地址结果数组 error => reject(error) // 失败抛出错误 ); } catch (err) { console.log(err, `Can't reach the remote server`); reject(err); } }) };
2. 改造绑定ID的方法
// Write a function that handles the record ID and couples with the geocode data const coupleGeocodeRecordID = async (address, recordId) => { const geoItems = await geoCoder(address); // 给每个地址结果追加原始记录ID const processedItems = geoItems.map(item => ({ ...item, recordId: recordId // 自定义键名可按需修改 })); // 此处可添加后续业务逻辑:比如存储结果、渲染地图标记等 console.log('绑定ID后的地址结果:', processedItems) return processedItems };
3. 额外注意事项
你原有代码中fetch使用了GET方法却传入了body,GET请求不支持携带请求体,若你的后端接口需要接收参数,请将method改为POST。
内容的提问来源于stack exchange,提问作者JackJack
相关产品推荐
相关产品推荐

