'然后'成功回调的词汇范围是什么?角度承诺的功能?

时间:2016-04-27 01:55:24

标签: javascript angularjs promise q lexical-scope

我试图理解为什么我的控制器中注入的某些dependecies(或其他声明的变量)在'然后'的成功/​​错误回调中不可用。延期承诺的功能。

我已经在角色$ q的文档和几个帖子中进行了搜索,但我无法回答我的问题...也许我没有搜索到正确的关键字,我不知道。

这是我的控制器片段,其中包含我想知道的问题。 提前谢谢!

(function () {
'use strict';
angular
    .module('app.aModule')
    .controller('mycontroller', MyController);

MyController.$inject = ['$controller', '$scope', 'myService'];

function MyController($controller, $scope, myService) {

    $scope.myProp;
    var myVariable1 = 'hello';

    //.............some code.................

    $scope.save = function(event) {
            var myVariable2 = 'World!';
            myService.post($scope.myProp).then(
                function (result) {
                    // 1. can I access to myVariable1 here?
                    // 2. can I access to myVariable2 here?
                    // 3. can I access to $scope or $controller dependency here?
                    // 4. can I access to myService dependency here?
                },
                function (error) {
                    // do something
                }
            );
        };

    //.............some code.................
}

})();

这是我的角度服务的post方法:

 function post(data) {
        var deferred;
        deferred = $q.defer();

        $http.post(apiUrl + endpoint + 'post', data).then(function (result) {
            deferred.resolve(result);
        }, function (error) {
            deferred.reject(error);
        });

        return deferred.promise;
    };

1 个答案:

答案 0 :(得分:0)

这不取决于承诺。 你无法理解闭包功能。

闭包是一个可以访问父作用域的函数(它不是角度作用域),即使在父函数关闭之后也是如此。 如果您将 myVariable1 或(和) myVariable2 写入函数,则可以看到此varibales,但如果您只是调试它就无法看到它(如果您没有看到它)写不出来。)

回答: 1和2 - 取决于你是如何做到的。 3.范围 - 是的。控制器 - 无法理解什么是意思。 4.与1和2相同的答案。