我有两个函数,它们返回对AngularJS的$ http.post的调用。 这两个函数是savePart1()和savePart2()
savePart1 = (): IPromise<any> => {
return $http.post(....)
}
savePart2 = (): IPromise<any> => {
return $http.post(....)
}
如果savePart1()失败,我尝试不调用Part2()。 我做了这样的事情:
this.savePart1().then((response1) => {
if (response1.status !== 200)
// don't call savePart2()
this.savePart2().then((response2) => {
if(response1.status === 200)
//display success message when both calls succeed
}):
}), (error) => {
//handle error;
}).finally();
我的问题是,如果savePart2()的响应未返回状态200(不一定是错误),如何取消调用savePart2()。 IPromise似乎没有拒绝方法。我只是从第一笔承诺中回来吗?
我的目标也是在两个调用都成功时显示成功消息。我的语法是做到这一点的最佳方法。我想在任何调用失败时添加一个错误处理程序。
答案 0 :(得分:0)
看来您大部分已经实现了想要的目标。要让finally
等待第二个呼叫,您可以通过then
回调should return
the inner promise。
this.savePart1().then(response1 => {
if (response1.status !== 200)
return this.savePart2().then(response2 => {
// ^^^^^^
if (response1.status === 200)
… // display success message when both calls succeed
else
… // handle non-200 status from call 2
}, error => {
… // handle error from call 2
});
else
… // handle non-200 status from call 1
}), error => {
… // handle error from call 1
}).finally(…);
要对错误使用通用处理程序,请switch from .then(…, …)
to .then(…).catch(…)
:
this.savePart1().then(response1 => {
if (response1.status !== 200)
return this.savePart2().then(response2 => {
if (response1.status === 200)
… // display success message when both calls succeed
else
… // handle non-200 status from call 2
});
else
… // handle non-200 status from call 1
}).catch(error => {
… // handle errors from both calls
}).finally(…);
您甚至可以通过引发异常来处理意外的状态代码:
this.savePart1().then(response1 => {
if (response1.status !== 200)
throw new Error("unexpected status "+response1.status);
return this.savePart2().then(response2 => {
if (response1.status !== 200)
throw new Error("unexpected status "+response2.status);
… // display success message when both calls succeed
});
}).catch(error => {
… // handle anything
}).finally(…);
如果不需要两个响应值来显示成功消息,那么甚至可以unnest the then
calls。