我正在研究SOA项目,我正在编写一个Node js实用程序来完成我的工作。该实用程序从使用SOA调用登录到服务器开始,然后调用一系列SOA调用,其中每个SOA调用都取决于上一个调用的结果。
我已经使用promise-then
框架来实现这一目标。下面是我的代码:
const loginPromise = postRequest(req, headersObj, loginUrl, Constants.loginData);
const queryPromise = loginPromise.then(loginSuccess, loginFailure);
const searchPromise = queryPromise.then(handleSavedQuerySearchResponse, onFailure);
const createPromise = searchPromise.then(handleSearchSoaResponse, onFailure);
const updatePromise = createPromise.then(handleCreateObjectSoaResposne, onFailure);
const plantDataPromise = updatePromise.then(handleUpdateObjectSoaResponse, onFailure);
function postRequest(request: any, header: any, reqUrl: string, jsonData: any): Promise<any> {
return new Promise((resolve) => {
request.post({
headers: header,
url: reqUrl,
body: JSON.stringify(jsonData),
}, (err: any, resp: any, bodyParam: any) => {
resolve({error: err, response: resp, body: bodyParam});
});
});
}
在成功执行一个SOA时,将从callback
函数执行下一个SOA。在没有错误的情况下,一切正常。但是,如果服务器已关闭或在任何其他故障情况下,我都希望退出此promise-then
链。
当前,如果发生任何错误,流程将进入 onFailure
方法,但是在执行之后,它将控制权交给链中的下一个Promise,并以null
作为该方法的输入。
无论何时遇到任何错误,我都想摆脱promise-then链,而其他promise不应执行。如果有人可以帮助我,我将不胜感激。
答案 0 :(得分:1)
此代码尚未经过测试,因此应该比实际解决方案更像是伪代码:
尝试像这样更重组代码:
const request = require('request-promise-native')
postRequest(req, headersObj, loginUrl, Constants.loginData)
.then(loginSuccess)
.then(handleSavedQuerySearchResponse)
.then(handleSearchSoaResponse)
.then(handleCreateObjectSoaResposne)
.then(handleUpdateObjectSoaResponse)
.catch(console.error)
function postRequest(request: any, header: any, reqUrl: string, jsonData: any): Promise<any> {
return request.post({
headers: header,
url: reqUrl,
body: JSON.stringify(jsonData),
}, (err: any, resp: any, bodyParam: any) => {
resolve({error: err, response: resp, body: bodyParam});
});
}
错误处理是Promise链的一部分。
或者您可以使用async / await进行几乎相同的操作。
如果您想进行一些实际的错误处理,则可以在此处添加onFailure函数,而不仅仅是console.error