Javascript 解决承诺时AngularJS延迟视图更新

Javascript 解决承诺时AngularJS延迟视图更新,javascript,angularjs,promise,Javascript,Angularjs,Promise,我在控制器中有一些动作。它包含一个promise对象,解析后,该对象应通过控制器作为绑定更新视图。问题是解析的值是正确的(记录在控制台中),但将其分配给控制器不会更新视图。它仅在包含该承诺的操作再次执行时更新。因此,如果我继续按一个按钮执行它,更新将延迟一次执行 我使用的是AngularJS 1.6.5。我没有使用$q。也没有$scope,因此请不要$apply 我的简化控制器有两名成员,用于比较有无承诺的行为: var vm = this; vm.textSync = 0; vm.textA

我在控制器中有一些动作。它包含一个promise对象,解析后,该对象应通过控制器作为绑定更新视图。问题是解析的值是正确的(记录在控制台中),但将其分配给控制器不会更新视图。它仅在包含该承诺的操作再次执行时更新。因此,如果我继续按一个按钮执行它,更新将延迟一次执行

我使用的是
AngularJS 1.6.5
。我没有使用
$q
。也没有
$scop
e,因此请不要
$apply

我的简化控制器有两名成员,用于比较有无承诺的行为:

var vm = this;

vm.textSync = 0;
vm.textAsync = 0;

vm.onclick = function()
{
    var action = new Promise(function(resolve, reject)
    {
        resolve(vm.textAsync + 1);
    });

    action.then(function(result)
    {
        console.log(result);
        vm.textAsync = result;
    });

    vm.textSync++;
};
记录的值等于递增的textSync(1,2,3,…),但视图中的
textSync
等于每次单击后的
textSync-1
(因此为0,1,2,…)。这是为什么?如何解决

我的简化观点:

<input type="button" value="Click me" ng-click="$ctrl.onclick()" />
<input ng-model="$ctrl.textSync" />
<input ng-model="$ctrl.textAsync" />

由于您不想触发摘要周期,您可以使用$timeout加0秒等待摘要周期,因此请像这样包装您的承诺,只需在函数后省略0-无需:

$timeout(action.then(function(result) {
        console.log(result);
        vm.textAsync = result;
    }));