![](/img/trans.png)
[英]Conditional Chaining of $http-calls with Promises in AngularJS
[英]Conditional chaining of promises
我想兌現我的諾言,取決於上一個呼叫是否已解決或拒絕。 我在所有承諾中都致電服務器。 所以,我寫它像
apiServices.patientsSearch(id)
.then(function(data){
return callback(null,data);
},function(err){
return apiServices.studiesSearch(id);
}).then(function(data){
return callback(null,data);
},function(){
return apiServices.seriesSearch(id);
}).then(function(data){
return callback(null,data);
})
.catch(function(err){
return callback(false,err);
});
當每個返回一個promise對象時,問題在於,如果除最后一個調用之外的任何promise都被解析,則總是調用catch。 我在想的一種方法是檢查err是否為空並忽略它。 這是正確的方法嗎?
我正在使用請求模塊,如果我將其設置為永遠:是的,我開始得到-
{ [Error: socket hang up] code: 'ECONNRESET' }
如果永遠是錯誤的,它將起作用。 為什么即使請求結束后我的套接字仍然很忙? 由於下一個請求僅在調用reject時才會執行,因此套接字應該在那個時候可用。
您只應調用一次callback
。 每次承諾后不要將其作為onfulfilled-handler傳遞,最后將其調用一次:
apiServices.patientsSearch(id).then(null, function(err){
return apiServices.studiesSearch(id);
}).then(null, function(){
return apiServices.seriesSearch(id);
}).then(function(data){
callback(null,data);
}, function(err){
callback(false,err);
});
要么
apiServices.patientsSearch(id).catch(function(err){
return apiServices.studiesSearch(id);
}).catch(function(){
return apiServices.seriesSearch(id);
}).then(function(data){
callback(null,data);
}, function(err){
callback(false,err);
});
當然,您根本不應該在基於Promise的代碼中調用任何回調,因此僅在必須與遺留代碼接口時才使用此回調。 否則,請勿使用callback
參數,而僅return
諾言:
return apiServices.patientsSearch(id).catch(function(err){
return apiServices.studiesSearch(id);
}).catch(function(){
return apiServices.seriesSearch(id);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.