我正在开发一个 AngularJS 应用程序,其中工厂(查询数据库)返回 promise 。
对这些工厂的调用封装在诸如以下的函数中:
function getUsers(id) {
MyUserFactory.getUsers(id).then(function(data) {
$scope.mydata = data;
...lot of code...
})
}
function updateAcordingToUserAndWeatherOfTheDay(day) {
MyWeatherFactory.getWeather(day).then(function(data) {
if ($scope.mydata.likesRain) {
...
}
})
}
然后我有一个:
getUser(42); updateAcordingToUserAndWeatherOfTheDay(monday);
显然,这种方法有二分之一的效果,如果 getUser()
完成的异步查询没有时间完成,我会在 updateAcordingToUserAndWeatherOfTheDay()
中收到错误> 在 $scope.mydata.likesRain
我知道我可以链接 .then()
来强制一个查询等待另一个查询,但是
这个重构会花费很多时间,我现在没有时间。
还有其他方法可以等待 promise 完成吗?至少在重构之前暂时修复错误。现在我们的解决方案是一个 3 秒计时器...
最佳答案
重构这个非常简单,只需使用方法返回
promise 即可。
function getUsers(id) {
return MyUserFactory.getUsers(id).then(function(data) {
$scope.mydata = data;
...lot of code...
})
}
function updateAcordingToUserAndWeatherOfTheDay(day) {
return MyWeatherFactory.getWeather(day).then(function(data) {
if ($scope.mydata.likesRain) {
...
}
})
}
getUsers(42).then(function() { updateAcordingToUserAndWeatherOfTheDay(day); });
除了您需要修改的代码之外,这不必更改任何现有代码(因为返回 promise 不会破坏任何现有基础设施)。
这是重构使其发挥作用的最快方法。
关于javascript - AngularJS : Synchronize multiple independent promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31031154/