承诺解决后检索存储在服务中的数据 AngularJS/ES6
Retrieve data stashed in service after resolve of promise AngularJS/ES6
我有一项服务可以从后端获取数据,returns 作为承诺。一旦我兑现承诺,我就会在服务中维护数据,但我希望在数据可用时尽可能多地获取已保存的数据。
module.factory
var dataStash = {};
var service = {
getListData : getListData,
returnDataByListname: returnDataByListname
};
return service;
function getListData(listName){
//...get the data corresponding to this list
).then(setData);
function setData (data, listName){
//store the data from the resolved promise as an
//object attribute with name same as the list name
dataStash.listName = data;
}
}//end getListData
function returnDataByListname(listName){
//how best to do this??
return dataStash.listName;
}
一切正常,但由于我没有在承诺解决后立即返回数据,而是将其保存在服务中,因此存在我多久可以调用 returnDataByListname 的问题。由于我不知道承诺何时会得到解决以及数据何时可用,我该如何设置 returnDataByListname 以便它 returns 数据在被调用后立即可用?
如果您主要是缓存数据,那么 returnDataByListname
可以 return 一个承诺:
function returnDataByListname(listName){
return promiseStash[listName] || promiseStash[listName] = getListData(listName);
}
然后呼叫者可以重复呼叫returnDataByListname('foo').then(foo => console.log(foo));
,但getListData('foo')
只会被呼叫一次。
我有一项服务可以从后端获取数据,returns 作为承诺。一旦我兑现承诺,我就会在服务中维护数据,但我希望在数据可用时尽可能多地获取已保存的数据。
module.factory
var dataStash = {};
var service = {
getListData : getListData,
returnDataByListname: returnDataByListname
};
return service;
function getListData(listName){
//...get the data corresponding to this list
).then(setData);
function setData (data, listName){
//store the data from the resolved promise as an
//object attribute with name same as the list name
dataStash.listName = data;
}
}//end getListData
function returnDataByListname(listName){
//how best to do this??
return dataStash.listName;
}
一切正常,但由于我没有在承诺解决后立即返回数据,而是将其保存在服务中,因此存在我多久可以调用 returnDataByListname 的问题。由于我不知道承诺何时会得到解决以及数据何时可用,我该如何设置 returnDataByListname 以便它 returns 数据在被调用后立即可用?
如果您主要是缓存数据,那么 returnDataByListname
可以 return 一个承诺:
function returnDataByListname(listName){
return promiseStash[listName] || promiseStash[listName] = getListData(listName);
}
然后呼叫者可以重复呼叫returnDataByListname('foo').then(foo => console.log(foo));
,但getListData('foo')
只会被呼叫一次。