【发布时间】:2015-08-19 04:15:21
【问题描述】:
当我尝试从 map 函数中的回调返回时,我目前遇到了问题。与异步代码的通常情况一样,map 函数在异步调用完成之前完成,这意味着我丢失了数据。
我可以在map 函数中做些什么来确保异步调用完成?我试图只从承诺中返回,但似乎 map 函数在到达末尾时返回 null。
在我的具体示例中,我尝试从 Yelp API 获取一堆企业,然后对它们的各个地址进行地理编码,以便我可以将它们添加到我网站上的 Google Maps 地图中。
代码:
Q.Promise(function(resolve, reject, notify) {
yelp.search({
category_filter: 'food,restaurants',
location: city,
limit: 3,
sort: 2, // sort mode: 2=Highest Rated
}, function(error, data) {
if (error) {
reject(new Error(error));
}
else {
if (data['businesses'] && data['businesses'].length > 0) {
results = data['businesses'].map(function(business) {
sleep.usleep(500000); // sleep for 0.5 seconds so as not to get throttled by google
address = business.location.display_address.join(', ');
geocoder.geocode(address)
.then(function(res) {
return {
img_url: business.image_url,
name: business.name,
url: business.url,
rating_img_url: business.rating_img_url,
address: address,
coords: [res[0]['latitude'], res[0]['longitude']],
}
})
.catch(function(err) {
console.log('Could not geocode: ' + err);
return;
});
});
resolve(results);
}
}
});
});
【问题讨论】:
标签: javascript node.js google-maps asynchronous