我收到错误Cannot read property of '$promise' of undefined.
以下是抛出它的代码:
var myPromise = sharedDataService.getData($scope.entityId).$promise;
resolvePromise(myPromise, 'entityData');
resolvePromise
方法:
function resolvePromise(promise, resultObject){
promise.then(function(response){
$scope[resultObject] = result;
});
promise['catch'](function(error){
//error callback
});
promise['finally'](function(){
//finally callback
});
sharedDataService如下所示:
var publicInterface = {
getData: getData
};
var storedData;
function getData(entityId) {
if(storedData.entityId === entityId){
return storedData;
}else{
var entityDataPromise = dataAccessService.getEntityData(entityId).$promise;
entityDataPromise.then(function (response) {
storedData = response;
return storedData ;
});
entityDataPromise['catch'](function(error) {
//throw error;
});
entityDataPromise['finally'](function(done) {
//do finally
});
}
}
return publicInterface;
最后,dataAccessService:
var publicInterface = {
getEntityData: getEntityData
}
var entityData = $resource(apiUrl + 'Entity', {}, {
'getEntityData': {
method: 'GET',
url: apiUrl + 'Entity/getEntityDataById'
}
}
function getEntityData(entityId){
return entityData.getEntityData({entityId: entityId})
}
return publicInterface;
最初的承诺是抛出错误。当我把断点放在不同的地方时,我可以看到我的数据有时被返回。 sharedDataService的功能几乎就是一个chaching服务。
为什么我的原始承诺未定义?
答案 0 :(得分:1)
当getData()
为假时,return
方法没有if
。所以你需要返回entitiyDataPromise
。
但是,这意味着一个条件返回一个promise而另一个条件返回一个对象
因此两个条件都需要返回一个承诺,我们可以使用$q
作为第一个条件
function getData(entityId) {
if(storedData.entityId === entityId){
// return to getData()
return $q.resolve(storedData);
}else{
var entityDataPromise = dataAccessService.getEntityData(entityId).$promise;
// return to getData()
return entityDataPromise.then(function (response) {
storedData = response;
return storedData ;
});
entityDataPromise['catch'](function(error) {
//throw error;
});
entityDataPromise['finally'](function(done) {
//do finally
});
}
}
请务必注入$q
。
在控制器中将是:
var myPromise = sharedDataService.getData($scope.entityId);
resolvePromise(myPromise, 'entityData');