如何将Axios请求结果赋值给JavaScript对象的location_geo_point字段
问题修复方案
- 变量顺序错误:
getCoords函数定义在rowData解构之前,此时location变量还未声明,请求参数取值异常;同时函数入参getCoords和内部定义的函数重名,会产生变量覆盖。 - 异步逻辑处理错误:Axios请求是异步操作,直接将
getCoords()返回值赋值给字段,得到的是Promise对象而非接口返回的真实坐标数据。 - 无返回值:当前
getCoords的then回调中仅打印了结果,没有将结果return,就算等待异步完成也无法拿到坐标值。
修复后代码
// 改为异步函数,支持等待接口返回结果 async function createElasticSearchJob(rowData) { // 优先解构拿到location,避免取值异常 const { country, hiring_company: { name: companyName }, id, location, name, posted_time, posted_time_friendly, snippet, state: locationState, url, } = rowData; // 封装坐标请求,把location当参数传入,避免变量污染 async function getCoords(targetLocation) { const res = await axios.get( `http://nominatim.openstreetmap.org/search?q=${targetLocation}&format=json&polygon=1&addressdetails=1` ) // 可选链避免数据为空时报错 return res.data?.[0]; } // 等待坐标请求完成拿到真实结果 const locationGeoPoint = await getCoords(location); // 组装返回对象 return { job_id: id, job_title: name, location: location, num_days_since_posted: posted_time_friendly, job_date_posted: posted_time, job_date_posted_date_value: posted_time, job_url: url, job_title_full_from_desc: name, job_company_name: companyName, job_location: location, job_desc_text: snippet, job_desc_html: snippet, job_source: "ZipRecruiter API", job_years_of_experience: null, DOC_HASH: id, location_geo_point: locationGeoPoint, }; }
调用说明
修改后createElasticSearchJob为异步函数,调用时需要用await或者.then获取最终组装完成的对象:
// 方式1:await调用(需要放在async作用域内) const jobData = await createElasticSearchJob(rowData); // 方式2:then链式调用 createElasticSearchJob(rowData).then(jobData => { // 后续处理逻辑 })
内容的提问来源于stack exchange,提问作者user3109127
相关产品推荐
相关产品推荐

