Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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 什么';调用这些多个getJSON API调用的正确方法是什么?_Javascript_Jquery - Fatal编程技术网

Javascript 什么';调用这些多个getJSON API调用的正确方法是什么?

Javascript 什么';调用这些多个getJSON API调用的正确方法是什么?,javascript,jquery,Javascript,Jquery,正如你在下面看到的,我正在嵌套它们,每一个都取决于前一个测试的结果。我认为最好是将它们链接在一起(只是让它们按顺序排列),但每个结果都需要一段时间才能返回,而且是异步的。当我调用函数时,结果还没有加载,它返回undefined。在尝试获取结果之前,如何确保函数中的所有操作都已完成 <!DOCTYPE html> <head> </head> <body> <script src="https://ajax.googleapis.com/

正如你在下面看到的,我正在嵌套它们,每一个都取决于前一个测试的结果。我认为最好是将它们链接在一起(只是让它们按顺序排列),但每个结果都需要一段时间才能返回,而且是异步的。当我调用函数时,结果还没有加载,它返回undefined。在尝试获取结果之前,如何确保函数中的所有操作都已完成

<!DOCTYPE html>
<head>

</head>

<body>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script type="text/javascript">

/* 
To get endpoint
https://api.weather.gov/points/39.7456,-97.0892

To get office, zone, forecast etc from end point
https://api.weather.gov/gridpoints/TOP/31,80
*/

var tLat = 40.985;
var tLon = -71.696;

stationString = getStationFromLatLon(tLat,tLon);
console.log(stationString);



function getStationFromLatLon(theLat,theLon){

    theURL = 'https://api.weather.gov/points/' + theLat + "," + theLon;
    var obsStationsURL;
    var obsStationURL;

    // This passes in the lat lons and gets the weather observation stations 
    $.getJSON(theURL, function(data){
        console.log(data);

        obsStationsURL = data.properties.observationStations;

        console.log(obsStationsURL);

        // Get the first obsStation using the obsStations URL
        $.getJSON(obsStationsURL, function(data2){

            obsStationURL = data2.observationStations[0];

            console.log(obsStationURL);

            // Get the weather station ID and name using the station URL from previous call
            $.getJSON(obsStationURL, function(data3){
                stationID = data3.properties.stationIdentifier;
                stationName = data3.properties.name;

                console.log(stationID + " " + stationName);
                returnString = stationID + " " + stationName;
                return returnString; 
            })

        });
    });
}


</script>
</body>

/* 
获取端点
https://api.weather.gov/points/39.7456,-97.0892
从终点获取办公室、区域、预测等
https://api.weather.gov/gridpoints/TOP/31,80
*/
var-tLat=40.985;
var-tLon=-71.696;
stationString=getStationFromLatLon(tLat,tLon);
console.log(stationString);
函数getStationFromLatLon(theLat,theLon){
theURL=https://api.weather.gov/points/“+theLat+”,“+theLon;
var-obsstationurl;
var obstationUrl;
//它经过拉特隆斯,到达气象观测站
$.getJSON(URL、函数(数据){
控制台日志(数据);
obsStationsURL=data.properties.observationStations;
console.log(obsStationsURL);
//使用obstations URL获取第一个obstation
$.getJSON(obsStationsURL,函数(data2){
ObstationUrl=数据2.观测站[0];
控制台日志(obstationurl);
//使用上一次呼叫中的站点URL获取气象站ID和名称
$.getJSON(obstationUrl,函数(data3){
stationID=data3.properties.stationIdentifier;
stationName=data3.properties.name;
console.log(stationID+“”+stationName);
returnString=stationID+“”+stationName;
返回字符串;
})
});
});
}

您需要返回承诺并等待响应。试试这个:

var-tLat=40.985;
var-tLon=-71.696;
函数getStationFromLatLon(theLat,theLon){
返回新承诺((解决、拒绝)=>{
var theURL=”https://api.weather.gov/points/“+theLat+”,“+theLon;
var-obsstationurl;
var obstationUrl;
//它经过拉特隆斯,到达气象观测站
$.getJSON(URL、函数(数据){
控制台日志(数据);
obsStationsURL=data.properties.observationStations;
console.log(obsStationsURL);
//使用obstations URL获取第一个obstation
$.getJSON(obsStationsURL,函数(data2){
ObstationUrl=数据2.观测站[0];
控制台日志(obstationurl);
//使用上一次呼叫中的站点URL获取气象站ID和名称
$.getJSON(obstationUrl,函数(data3){
var stationID=data3.properties.stationIdentifier;
var stationName=data3.properties.name;
console.log(stationID+“”+stationName);
var returnString=stationID+“”+stationName;
解析(返回字符串);
});
});
});
});
}
getStationFromLatLon(tLat,tLon)。然后(stationString=>{
console.log(stationString);

});
您可以使用
然后
方法简化
$返回的承诺。getJSON

const getStationFromLatLon=(lat,lng)=>
$.getJSON('https://api.weather.gov/points/“+lat+”,“+lng)
.then(data=>$.getJSON(data.properties.observationStations))
.then(data=>$.getJSON(data.observationStations[0]))
.then(data=>`${data.properties.name}${data.properties.stationIdentifier}`)
getStationFromLatLon(39.7456,-97.0892)
.然后(console.log)

更改应该在后端进行,以使前端的处理更容易,因此您只需进行一次调用即可获得结果。。您取决于以下调用中每个
getJSON
调用的结果,因此无法加快该过程。您可能正在寻找@“回调”这是NOAA/国家气象局提供的API,因此我无法在后端进行任何更改,因为我不拥有该API。也许你的意思是别的,我误解了。顺便说一句,这里的答案与下面“答案”下的答案有什么区别(我是新来的,发发发慈悲吧:))这里应该是评论,试图澄清什么意思,或者关于其他地方的小建议。下面的答案是回答您问题的实际尝试。请拿着这本书,看看这本书。谢谢斯科特。奇怪的是,为什么要将函数设为“const”?因为我不希望它会改变。我已经在ES6环境中工作了一段时间,所以这是我的默认设置。我根本不使用
var
,只在必要时使用
let