You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:36:03