簡體   English   中英

有條件的諾言鏈

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM