我正在编写一个
的应用程序我已经开发了以下承诺链,成功实现了上述目标:
getUserLocation()
.then(function(locationData) {
return getCurrentWeather(locationData);
}).then(function(currentWeatherData) {
return showCurrentWeather(currentWeatherData);
});
现在我需要为应用添加更多功能,以便:
以下是我一直在尝试的内容,但它不起作用。你知道怎么解决这个问题吗?我的目标是找到一个只进行一次AJAX调用以获取用户位置的解决方案,然后在另外两个AJAX调用中使用这些数据(从getCurrentWeather
和getWeatherForecast
函数返回)。
getUserLocation()
.then(function(locationData) {
getCurrentWeather(locationData);
getWeatherForecast(locationData);
}).then(function() {
showCurrentWeather(currentWeatherData);
showWeatherForecast(weatherForecastData);
});
更新1 - 找到工作解决方案:
感谢@ReedSpool建议的方法,我设法开发了一个有效的代码:
getUserLocation()
.then(function(locationData) {
return jQuery.when(
getCurrentWeather(locationData),
getWeatherForecast(locationData)
);
}).then(function(currentWeatherData, weatherForecastData) {
showCurrentWeather(currentWeatherData[0]);
showWeatherForecast(weatherForecastData[0]);
});
解决方案包括jQuery.when
。我还必须将0
的索引值添加到传递给showCurrentWeather
和showWeatherForecast
函数的参数中。这是因为返回的JSON现在包含有关readyState
和status
的其他信息。我的初始场景只有一次对天气API的AJAX调用,这种情况并没有发生。
答案 0 :(得分:2)
如果你确实在使用jQuery promises(我从你问题的标签中收集,因为提供的代码没有jQuery特定的东西),那么你正在寻找jQuery.when()
每个完整的promise库都有与此类似的功能(Q.all例如)
请注意,在第一个示例中,您返回getCurrentWeather(locationData)
的结果。在promise回调中返回一个promise会使外部promise等待内部promise的解析。要等待两个或更多承诺解决,请使用jQuery.when()
之类的...
getUserLocation()
.then(function(locationData) {
return jQuery.when(
getCurrentWeather(locationData),
getWeatherForecast(locationData)
);
}).then(function(curretnWeatherData, weatherForecastData) {
showCurrentWeather(curretnWeatherData[0]);
showWeatherForecast(weatherForecastData[0]);
});
请参阅此处的文档:https://api.jquery.com/jquery.when/