Javascript 使用promise.all从两个api获取数据
我想从两个API获取数据。在firest调用(getDatafromGeonames)中,我想获取纬度和经度,然后我想将它们作为参数传递给第二个调用(getWaetherData),以获取天气信息,然后我想存储结果并传递给我的端点 以下是我的尝试:Javascript 使用promise.all从两个api获取数据,javascript,node.js,api,Javascript,Node.js,Api,我想从两个API获取数据。在firest调用(getDatafromGeonames)中,我想获取纬度和经度,然后我想将它们作为参数传递给第二个调用(getWaetherData),以获取天气信息,然后我想存储结果并传递给我的端点 以下是我的尝试: const res1 = getDatafromGeonames(geonameAPIURL,city,geonamesKey).then(res =>{ getWaetherData(res.address.lat,
const res1 = getDatafromGeonames(geonameAPIURL,city,geonamesKey).then(res =>{
getWaetherData(res.address.lat, res.address.lng)})
Promise.all([res1]).then((res)=>{
//do somthing
console.log(res);
})
我不知道为什么它在执行getWaetherData之前会跳转到then并打印未定义的内容?如何从第一个API获取数据,然后使用这些数据获取天气信息,然后对这些数据进行处理
非常感谢:)
承诺。所有
仅适用于可以并行运行的承诺,您必须按顺序运行它们:
getDataFromGeonames(geonameAPIURL, city, geonamesKey)
.then((res) => getWeatherData(res.address.lat, res.address.lng))
.then((res) => {
// do something
console.log(res);
return res;
});
Promise.all(promises[])
方法用于在所有promises[]
都已执行时执行某些逻辑。如果您有2个独立的异步调用,并且您想在这两个调用都执行后执行一些操作,这将非常有用
根据您所描述的,您必须执行的第二个API调用似乎需要第一个API调用的结果,因此您应该使用的promise运算符是.then()
或者,在EMS6样式中:
const getWaetherData = async (geonameAPIURL, city, geonamesKey) => {
const geodata = await getDatafromGeonames(geonameAPIURL,city,geonamesKey);
return await getWaetherData(geodata.address.lat, geodata.address.lng)
}
我将最后一段代码放入了一个方法中,因为如果要使用
wait
运算符,则需要处于async
上下文中。您不能使用promise。所有这些都是因为两个API调用应该是一个接一个的。如果我按顺序运行它们,则在第二次记录res时,我会得到未定义的结果,如果您想访问res
的承诺在外部或另一个中。然后必须返回它,但这里没有返回任何内容。第一个正在工作,但我不知道如何使用第二个调用的响应:(第二个调用由于使用wait而给我一个错误。)
const getWaetherData = async (geonameAPIURL, city, geonamesKey) => {
const geodata = await getDatafromGeonames(geonameAPIURL,city,geonamesKey);
return await getWaetherData(geodata.address.lat, geodata.address.lng)
}