javascript - AngularJS : Synchronize multiple independent promises

标签 javascript angularjs

我正在开发一个 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/

相关文章:

javascript - 在设置innerHtml之前应该是一个元素 "cleaned"?

javascript - Jest genMockFromModule 名为 exports

javascript - 咕噜 Jade 错误

javascript - mySQL 没有将数组返回到 angularJS 中

node.js - 将 AngularJS 应用程序部署到普通 Apache HTTP 服务器是一种常见的选择吗?

javascript - 展开/折叠表格行 Javascript 工作错误

javascript - 在 owl.carousel 中启动 html5 视频

javascript - 无法重新启动 Node 服务器

javascript - AngularJS 确定 ng-repeat 中的索引

javascript - 缓存失效和同步 Angular/后端