[英]An angular promise that uses another promise?
我正在研究可在兩個階段工作的用戶身份驗證功能:
在第一個電話完成之前,我無法撥打第二個電話。
我有一個名為UserService的服務,它具有如下功能:
UserService.load() # returns a promise which has when resolved gives the user's identity as a sring.
我還希望能夠將其包裝起來,這樣我可以:
RoleService.load() # returns a promise which when resolved gives the user's valid roles in the form ["role1", "role2", ... "roleN"]
為了實現RoleService.load(),我想我必須做類似的事情:
load: ()->
if promise?
# Dont do anything if this promise is already cached
promise
else
promise = UserService.load().then((standardId)=>
@set(@getRolesForUser(standardId))
)
假設getRolesForUser(u)立即返回,該進行哪種工作。 問題在於,第二個呼叫也將在網絡上,因此必須將其變成另一個承諾。
我真正想要做的就是以這樣一種方式來鏈接許諾:解決了第一個許諾之后,我傳遞給鏈的下一階段的就是第二個許諾的輸出。
能做到嗎? 語法是什么?
您可以創建新的延期並返回他的承諾。 然后,當您獲得第二個調用的值時,您可以解決承諾:
function load() {
var deferred = $q.defer();
UserService.load().then(function(standardId){
getRolesForUser(standardId).then(function(val) {
deferred.resolve(val)
})
});
return deferred.promise;
}
做類似的事情,等待一個完成。
UserService.load()
.then(function(res){
var id = res.data.id;
RoleService.load()
.then(function(role){
var roleId = role.id; // your logic
})
});
另一個更好的方法是兌現承諾。
UserService.load()
.then(function(res){
var id = res.data.id;
return RoleService.load();
})
.then(function(role){
var roleId = role.id; // your logic
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.