Angular 1 $范围和ES6 Promises

时间:2017-03-13 01:09:47

标签: javascript angularjs promise

说我有这段代码:

angular.controller('SomeController', function($scope, SomeService) {
    $scope.thing = 'hello';

    const successCallback = (response) => $scope.thing = response;

    SomeService.getTask(someData, successCallback, errorCallback); 
})

在SomeService触发SuccessCallback后,它将更新$ scope.thing,一切都很好,花花公子。

但是,如果我要将SomeService包装在这样的承诺中,那只是为了玩游戏:

angular.controller('SomeController', function($scope, SomeService) {
    $scope.thing = 'hello';

    const successCallback = (response) => $scope.thing = response;

    const promiseWrapper = (someData) => new Promise(
        (resolve, reject) => SomeService.getTask(someData, resolve, reject) );

    promiseWrapper(someData)
        .then( successCallback );
})

它会使用正确的数据触发successCallback,但不会更新$ scope对象。

我并没有真正尝试像这样的代码创建代码,只是想知道什么是通过更新范围来保持successCallback的承诺。

我正在使用Angular 1.5和Babel ES6转换器。

谢谢!

1 个答案:

答案 0 :(得分:1)

由于您使用的是Promise非角度对象,因此必须使用以下方式强制更新$scope道具:

$scope.$apply(() => {
  $scope.thing = response;
});

JS Fiddle Demo