我需要帮助我正在创建一个节点天气应用程序。我使用Google API来获取地址的经纬度,并将其反馈到Dark Sky API中,以便以JSON格式返回天气。Api数据与异步的Node.js和检索数据使其同步
我的问题是,在谷歌API返回经度和纬度之前,大部分时间天气API执行搜索。我知道为什么它会这样做,因为Node的异步特性。我的问题是如何让这部分同步?
var express = require('express');
var https = require('https')
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
var lon;
var lat;
app.post('/', function(req,res,next){
var search = req.body.search;
function google(){
var api = "API-KEY";
var url = https.get(`https://maps.googleapis.com/maps/api/geocode/json?address=${search}&key=${api}`, function(res3){
var body = "";
var googleResults;
res3.on('data', function(data){
body += data.toString();
})
res3.on('end', function(){
googleResults = JSON.parse(body);
//console.log(body);
lat = googleResults.results[0].geometry.location.lat;
lon = googleResults.results[0].geometry.location.lon;
console.log(search);
})
});
}
google();
//connectc to API URL()
var request = https.get(`https://api.darksky.net/forecast/API-KEY/${lon},${lat}`, function(res2){
console.log(lon + " " + lat)
var body = "";
var weather;
//Read the data
res2.on('data', function(data){
body += data.toString();
})
res2.on('end', function(){
//Parse the data
weather = JSON.parse(body);
//Print data
//console.log("test = " + weather.currently.temperature)
res.render('index', {
temperature: weather.currently.temperature,
humidity: weather.currently.humidity,
wind: weather.currently.windSpeed
});
})
});
});
你不能让它同步!一种选择是只有在google结果完成后才调用天气api –
您在本文中发布了您的API密钥,它在编辑中被删除,但仍然公开曝光。你应该撤消它并重新发布一个新密钥。 – Adam
@亚当谢谢我已经有了,应该在发布之前加倍检查。 – monkeyman905