如何将真实数据转换为angularjs 1承诺?

时间:2017-12-22 15:27:51

标签: javascript angularjs promise angular-promise

我在AngularJS 1.5上有一个页面。它有一个服务层来处理使用promise的数据加载。

控制器将调用服务以获取如下数据:

var loadClients = programSelectorService.loadClients();
var loadYears = programSelectorService.loadYears();
$q.all([loadClients, loadYears ]).then(
    function(values) {
        handleClients(values[0]);
        handleYears(values[1]);
    },
    function(err) {
        dataModel.loadingError = err;
        dataModel.loadingClient = false;
        dataModel.loadingYear = false;
    }
);

在我向其添加缓存服务之前,它完美运行。缓存服务无需API调用即可直接获取实际数据。

所以我在loadClients()

中更改了这样的服务代码
var data = VCache.get(endPoint);
if(data) {
    deferred.resolve(data);   // line X
    // return data;           // line Y
    return deferred;
}

但是X线和Y线都不起作用。对于第X行,调用者会发现values[0]是一个承诺而不是实际数据。对于第Y行,来电者会发现values[0]null

我不想更改来电代码。所以我的问题是:如何将真实数据转换为AngularJS 1承诺?

贾斯汀

谢谢!

1 个答案:

答案 0 :(得分:1)

在您的情况下,您预先拥有数据,因此假设您使用$q服务,您只需返回已解决的承诺:

var data = VCache.get(endPoint);

return $q.resolve(data);

一般模式是这样的:

var deferred = $q.defer();

// Some async operation that completes later

setTimeout(function() {
    var data = VCache.get(endPoint);

    deferred.resolve(data);
}, 1000);

// Return the promise immediately

return deferred.promise;