将 key/value 对附加到 returns 一个对象的预先存在的方法
Append a key/value pair to preexisting method that returns an object
我正在使用 Heremaps API geocode
方法,我想知道是否有一种方法可以附加我自己的 key/value 对,它是通过 Heremaps API 记录我 运行 的地址。我 运行 遇到的问题是 geocode
方法只接受一个地址参数,它添加到 geocode
端点调用作为它的查询字符串,但它不再接受争论。我正在尝试想出一种方法来使用我的地址调用 geocode
方法并将记录 ID 附加到返回的对象中,以便 API returns 的每个地址,有原来的ID。
因为我无法更改 geocode
方法,因为它是从 cdn https://js.api.here.com/v3/3.1/mapsjs-service.js 调用的,所以我需要将记录 ID 附加到要返回的地址。
我添加了一个 coupleGeocodeRecordID
函数来尝试将记录 ID 与从 geocode
函数调用返回的对象结合起来,但是它 returns 一个错误
Uncaught (in promise) TypeError: can't access property 1533, geoCoder(...) is undefined
app.js 对数据库进行 API 调用以检索 refSrcData
常量中的记录 ID (3)、位置名称 (6) 和地址 (13)。 fetchAll
调用只是对数据库的 API 调用以提取这些值。
const refSrcData = {
from: 'xxxxxxx',
select: [3, 6, 13],
};
const fetchAll = () => {
fetch('call to the endpoint', {
method: 'GET',
headers: {
'QB-Realm-Hostname': 'xxxxxxxxx',
Authorization: 'xxxxxxxxxxxxxxx',
'Content-Type': 'application/json',
},
body: JSON.stringify(refSrcData),
})
.then(resp => resp.json())
.then(data => {
getRefAddresses(data);
})
.catch(error => console.log('Error:', error));
};
// Step 1: initialize communication with the platform
const platform = new H.service.Platform({
apikey: 'xxxxxxxxxxxxxxxxxxxxx',
});
// Get an instance of the geocoding service:
const service = platform.getSearchService();
// Call the geocode method with the geocoding parameters,
// the callback and an error callback function (called if a
// communication error occurs):
const geoCoder = address => {
try {
service.geocode({
q: address,
},
result => {
// Add a marker for each location found
result.items.forEach(item => {
console.log(item);
});
}
);
} catch (err) {
console.log(err, `Can't reach the remote server`);
}
};
// Write a function that handles the record ID and couples with the geocode data
const coupleGeocodeRecordID = (address, recordId) => {
geoCoder(address)[recId] = recordId;
};
const getRefAddresses = async dataObject => {
const recordId = dataObject.data.map(e => e['3'].value);
const refAddress = dataObject.data.map(e => e['6'].value);
const refName = dataObject.data.map(e => e['13'].value);
for (let i = 0; i <= 10; i++) {
let location = refAddress[i];
location.length > 0
?
await coupleGeocodeRecordID(location, recordId[i]) :
false;
}
};
window.onload = () => {
fetchAll();
};
这是我调用地理编码函数时返回的内容。我正在尝试将记录 ID 附加到每个对象。
有两个问题:
- 您的
geoCoder()
函数在搜索后未返回结果。它只是将它记录到控制台。 (您必须将 promises 与地理编码一起使用 API,但 promises 可以与 async / await 一起使用。我希望它有意义)
- 您的
coupleGeocodeRecordId()
函数没有对结果做任何处理。我假设您打算以某种方式使用它们。 (在这里,它们存储在一个名为 results
的对象中供以后使用。)
我修改了这两个函数。您的其余代码看起来不错,可能。
我无法测试此代码,所以我不知道您使用 API 的方式是否还有其他问题。
const results = {};
const geoCoder = address => new Promise( finish => {
try {
//try to run the search.
service.geocode(
{ q: address, },
finish //on success, resolve the promise with the result
);
} catch ( err ) {
console.error( "Can't reach the remote server.", err );
finish( null ); //on failure, resolve the promise with null
}
} );
const coupleGeocodeRecordID = async ( address, recordId ) => {
//try to get a search result.
const result = await geoCoder( address );
if( result ) {
//attach the record id to the search result
result.recordId = recordId;
//store the result for use? I don't know what these are for
results[ address ] = result;
}
}
我正在使用 Heremaps API geocode
方法,我想知道是否有一种方法可以附加我自己的 key/value 对,它是通过 Heremaps API 记录我 运行 的地址。我 运行 遇到的问题是 geocode
方法只接受一个地址参数,它添加到 geocode
端点调用作为它的查询字符串,但它不再接受争论。我正在尝试想出一种方法来使用我的地址调用 geocode
方法并将记录 ID 附加到返回的对象中,以便 API returns 的每个地址,有原来的ID。
因为我无法更改 geocode
方法,因为它是从 cdn https://js.api.here.com/v3/3.1/mapsjs-service.js 调用的,所以我需要将记录 ID 附加到要返回的地址。
我添加了一个 coupleGeocodeRecordID
函数来尝试将记录 ID 与从 geocode
函数调用返回的对象结合起来,但是它 returns 一个错误
Uncaught (in promise) TypeError: can't access property 1533, geoCoder(...) is undefined
app.js 对数据库进行 API 调用以检索 refSrcData
常量中的记录 ID (3)、位置名称 (6) 和地址 (13)。 fetchAll
调用只是对数据库的 API 调用以提取这些值。
const refSrcData = {
from: 'xxxxxxx',
select: [3, 6, 13],
};
const fetchAll = () => {
fetch('call to the endpoint', {
method: 'GET',
headers: {
'QB-Realm-Hostname': 'xxxxxxxxx',
Authorization: 'xxxxxxxxxxxxxxx',
'Content-Type': 'application/json',
},
body: JSON.stringify(refSrcData),
})
.then(resp => resp.json())
.then(data => {
getRefAddresses(data);
})
.catch(error => console.log('Error:', error));
};
// Step 1: initialize communication with the platform
const platform = new H.service.Platform({
apikey: 'xxxxxxxxxxxxxxxxxxxxx',
});
// Get an instance of the geocoding service:
const service = platform.getSearchService();
// Call the geocode method with the geocoding parameters,
// the callback and an error callback function (called if a
// communication error occurs):
const geoCoder = address => {
try {
service.geocode({
q: address,
},
result => {
// Add a marker for each location found
result.items.forEach(item => {
console.log(item);
});
}
);
} catch (err) {
console.log(err, `Can't reach the remote server`);
}
};
// Write a function that handles the record ID and couples with the geocode data
const coupleGeocodeRecordID = (address, recordId) => {
geoCoder(address)[recId] = recordId;
};
const getRefAddresses = async dataObject => {
const recordId = dataObject.data.map(e => e['3'].value);
const refAddress = dataObject.data.map(e => e['6'].value);
const refName = dataObject.data.map(e => e['13'].value);
for (let i = 0; i <= 10; i++) {
let location = refAddress[i];
location.length > 0
?
await coupleGeocodeRecordID(location, recordId[i]) :
false;
}
};
window.onload = () => {
fetchAll();
};
这是我调用地理编码函数时返回的内容。我正在尝试将记录 ID 附加到每个对象。
有两个问题:
- 您的
geoCoder()
函数在搜索后未返回结果。它只是将它记录到控制台。 (您必须将 promises 与地理编码一起使用 API,但 promises 可以与 async / await 一起使用。我希望它有意义) - 您的
coupleGeocodeRecordId()
函数没有对结果做任何处理。我假设您打算以某种方式使用它们。 (在这里,它们存储在一个名为results
的对象中供以后使用。)
我修改了这两个函数。您的其余代码看起来不错,可能。
我无法测试此代码,所以我不知道您使用 API 的方式是否还有其他问题。
const results = {};
const geoCoder = address => new Promise( finish => {
try {
//try to run the search.
service.geocode(
{ q: address, },
finish //on success, resolve the promise with the result
);
} catch ( err ) {
console.error( "Can't reach the remote server.", err );
finish( null ); //on failure, resolve the promise with null
}
} );
const coupleGeocodeRecordID = async ( address, recordId ) => {
//try to get a search result.
const result = await geoCoder( address );
if( result ) {
//attach the record id to the search result
result.recordId = recordId;
//store the result for use? I don't know what these are for
results[ address ] = result;
}
}