将promise承诺的值返回到angular.extend()中的变量

时间:2016-03-01 06:19:55

标签: javascript angularjs

在下面的示例中,如何将myVar设置为从异步服务方法返回的值

angular.extend(this, {
    myVar: (function() {
        getVal();
    })()
});

function getVal() {
    var d = $q.defer();
    MyFactory.Get()
        .then(function (resp) {
            d.resolve(resp.data);
        });
    return d.promise; // myVar should equal resp.data
};

我认为我表现出对承诺/推迟缺乏了解,所以建议会很棒。

1 个答案:

答案 0 :(得分:1)

由于myVar是一个变量,你可以从控制器的任何地方设置它。在初始化中,您可以将其分配给回退值或将其设置为undefined。并在异步调用成功后设置它。

angular.extend(vm, {
    myVar: 'fallback'
});

或:

angular.extend(vm, {
});

然后: 在控制器中:

getVar();
function getVar() {
    getVal().then(function(data){
        vm.myVar = data;
    });
}

function getVal() {
    var d = $q.defer();
    MyFactory.Get()
        .then(function (resp) {
            d.resolve(resp.data);
        });
    return d.promise; // myVar should equal resp.data
};

或更有效率:

getVal();

function getVal() {
    MyFactory.Get()
        .then(function (resp) {
            vm.myVar = resp.data;
        });
};

this更改为vm,以消除与this关键字可能会发生冲突的错误。