使用 $q.all 有时会导致选择无法正确读取模型

Using $q.all sometimes causes selects to not read the model correctly

我注意到我的 select 下拉列表中的一个有时不会包含 select 从 Angular 模型编辑的正确项目。我追踪到它似乎是在 Angular 加载表单之前未履行承诺的问题。在尝试了大量不同的方法之后,我最终决定做这个无意义的事情来让它起作用:

$q.all([
    $scope.categories.$promise,
    $scope.durations.$promise,
    $scope.job.$promise,
    $scope.jobStatuses.$promise,
    $scope.recruiters.$promise,
    $scope.states.$promise
]).then(function () {
    window.setTimeout(function() {
        $scope.editJob = {
            acceptsVisas: $scope.job.acceptsVisas,
            categoryId: $scope.job.categoryID,
            city: $scope.job.city,
            contact: $scope.job.contactID,
            description: $scope.job.details,
            duration: $scope.job.durationID,
            internalId: $scope.job.internalReqID,
            postal: $scope.job.postal,
            recruiter: $scope.job.recruiterID,
            state: $scope.job.stateID,
            status: $scope.job.jobStatusID,
            title: $scope.job.title
        }
    }, 10);
});

如果没有 setTimeout,select 偶尔不会被错误的招聘人员 selected。我已经将它调试到 Angular/JS 里面的东西。检查模型表明正确的字段是事先设置的,并且它不能可靠地重现,这使我假设 Angular 在承诺完成之前加载表单,然后 selecting正确的招聘人员在加载招聘人员数据时。没有任何内容脱离上下文,除了对资源的 运行 查询之外,这几乎是所有代码。我还更新了 windows.setTimeout 以使用 $timeout,但首先需要这样做的要点仍然存在。

一年过去了,我没有找到答案。对于我从那时起所做的所有搜索,似乎简单的答案是它是 Angular 中的一个缺陷,而且真的没什么可做的。超时解决方案有效,只是不需要它。不幸的是,那是 third-party 软件的 side-effect。