承诺的条件链
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);
});
因为每隔 returns 一个承诺对象,问题是如果除了最后一个调用解决之外的任何承诺,总是调用 catch。我想的一种方法是检查 err 是否为空并忽略它。这是正确的做法吗?
我正在使用请求模块,如果我设置永远:真,我开始得到-
{ [Error: socket hang up] code: 'ECONNRESET' }
有了 forever false,就可以了。为什么我的套接字在请求结束后仍然很忙?由于下一个请求只会在调用 reject 时才会进行,因此到那时套接字应该是空闲的。
您应该只调用 callback
一次。不要在每个promise之后作为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
promise:
return apiServices.patientsSearch(id).catch(function(err){
return apiServices.studiesSearch(id);
}).catch(function(){
return apiServices.seriesSearch(id);
});
我想根据之前的电话是已解决还是已拒绝来链接我的承诺。我正在打电话给服务器的所有承诺。 所以,我这样写-
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);
});
因为每隔 returns 一个承诺对象,问题是如果除了最后一个调用解决之外的任何承诺,总是调用 catch。我想的一种方法是检查 err 是否为空并忽略它。这是正确的做法吗?
我正在使用请求模块,如果我设置永远:真,我开始得到-
{ [Error: socket hang up] code: 'ECONNRESET' }
有了 forever false,就可以了。为什么我的套接字在请求结束后仍然很忙?由于下一个请求只会在调用 reject 时才会进行,因此到那时套接字应该是空闲的。
您应该只调用 callback
一次。不要在每个promise之后作为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
promise:
return apiServices.patientsSearch(id).catch(function(err){
return apiServices.studiesSearch(id);
}).catch(function(){
return apiServices.seriesSearch(id);
});