gpt4 book ai didi

javascript - NodeJS 中的同步地理编码

转载 作者:行者123 更新时间:2023-12-02 14:38:25 27 4
gpt4 key购买 nike

是否可以等待异步调用(geocode.reverseGeocode)?我想循环遍历目录中的 JPG 文件,从 EXIF 数据中获取纬度和经度,并进行反向地理编码以获取拍摄这些照片的国家/城市。最后它需要向文件添加一个 OSX 标签。但我需要多次运行 NodeJS 脚本才能获取所有标签。 (因为文件迭代器不会等待地理编码过程)。等待此请求的最佳解决方案是什么?

您可以在这里找到我的代码: https://github.com/Acoustics/jbTagify/blob/development/index.js

提前致谢

最佳答案

处理多个异步调用的一种简单方法是使用 Promise,并且无需同步运行它们并等待一个调用完成。您可以使用 Node 中可用的 native Promise,也可以使用 Promise 库,例如 bluebird可以 promise 其他执行异步操作的库。

最简单的用例如下所示

var Promise = require("bluebird");
var geocoder = Promise.promisifyAll(require('geocoder'))

geocoder.geocodeAsync("Atlanta, GA")
.then(function(data){
var lat = data.results[0].geometry.location.lat;
var lng = data.results[0].geometry.location.lng;
console.log("Coordinates for Atlanta, GA: " + lat + "," + lng);
});

其中使用 Promisified 函数 geocodeAsync(原始函数名称 + Async),该函数返回一个 promise ,并将返回的数据作为解析值。

如果您想要执行多个异步代码,您可以轻松创建一个 promise 数组,然后让它们并行运行,并在所有 promise 都得到解决时处理结果。

var citiesToGeocode = ["Miami, FL", "New York", "Orlando, FL", "Rio de Janeiro, Brazil"];
var geocodePromises = [];
for (var i = 0; i < citiesToGeocode.length-1; ++i) {
geocodePromises.push(geocoder.geocodeAsync(citiesToGeocode[i]));
}

Promise.all(geocodePromises).then(function(result) {
result.forEach(function(geocodeResponse){
console.log("Coordinates for " + geocodeResponse.results[0].formatted_address +": " + geocodeResponse.results[0].geometry.location.lat + "," + geocodeResponse.results[0].geometry.location.lng);
});
});

使用相同的方法,您可以使用 reverseGeocodeAsync 从坐标查找信息。

关于javascript - NodeJS 中的同步地理编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37239839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com