我想编写一个从node.js中的Google Places API返回数据的函数。该函数的定义如下所示:
function getAddress(placeName) {
return new Promise((resolve, reject) => {
return axios.get('https://maps.googleapis.com/maps/api/geocode/json?address=' + placeName + '&key=MyAPIKey').then(response => {
const placeID = response.data.results[0].place_id
return axios.get('https://maps.googleapis.com/maps/api/place/details/json?placeid=' + placeID + '&key=MyAPIKey').then(response => {
resolve(response.data.result)
return response.data.result // here i would like to return the data.result
}).catch(err => {
console.error(err);
});
}).catch(err => {
reject(err);
});
});
}
我想使用该函数并获取返回值。我已尝试使用下面的代码,但收到错误“承诺待处理”
const address = getAddress('someName').then(address => {
phone: address.formatted_phone_number
}).catch(err => {
console.error(err)
})
那么,我该如何构造函数,使其返回数据?
Promise是一个异步概念,return
函数中的语句是同步的。在您的示例中,new Promise(...)
分支脱离了同步执行流程,因此无法以同步方式访问在promise中产生的任何结果。
您的函数返回一个Promise,并且在其中处理异步结果的唯一方法是使用其then
或catch
方法。
长话短说,使用异步API时,有一种特定的编码方法,它支持事件驱动的方法。考虑以下架构:
var eventBus = new EventEmitter()
eventBus.on('address', (addr) => {
// do something with address
})
asyncGetAddress().then(addr => {
eventBus.emit('address', addr)
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句