在AngularJS中返回承诺的好方法,如何?

时间:2014-08-10 23:43:50

标签: javascript angularjs angular-promise

我有这个例子:

var lastTime = '';
$scope.loadEvents = function () {
   var items = listEvents();
    items.then(function (data) {
        lastTime = data;
    });
};


$scope.openModal = function (data) {
     //i want to use lastTime here;   
};

当我点击一个按钮时,我正在呼叫openModal(),在那里我想确保返回data

所以我想我必须从loadEvents()函数

返回一个承诺

任何想法?

1 个答案:

答案 0 :(得分:2)

如果你想确保从异步操作中获取数据,最好的处理方法是从源中返回promise(尽管链接它)并在{中使用它' {1}}。这将确保当您单击模态时,将始终返回数据并且不存在同步问题。

OpenModal

为了避免在响应尚未从服务器返回时多次同时调用,您可以返回先前创建的相同承诺。

$scope.loadEvents = function () {
   var items = listEvents();
   return items.then(function (data) { //Make the loadEvents return a promise
       return data;  //return the data after any mapping or anything you may want to do
    });
};


$scope.openModal = function (data) {
     $scope.loadEvents().then(function(data){ //
         lastTime = data;
     });
};

但是这个缓存承诺逻辑你应该理想地尝试在服务中而不是在控制器上处理它......