Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用promise.all从两个api获取数据_Javascript_Node.js_Api - Fatal编程技术网

Javascript 使用promise.all从两个api获取数据

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,

我想从两个API获取数据。在firest调用(getDatafromGeonames)中,我想获取纬度和经度,然后我想将它们作为参数传递给第二个调用(getWaetherData),以获取天气信息,然后我想存储结果并传递给我的端点

以下是我的尝试:

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)
}