【发布时间】:2017-08-15 23:55:01
【问题描述】:
我正在尝试在一些检索 REST 资源的代码中改进 Promise 的使用。我有许多 REST 调用使它们执行相同的操作序列:
- 如果之前没有获取过配置资源,则从服务器获取配置资源
- 分派一个 Flux 动作来指示请求的开始
- 发送对实际资源的请求
- 解析响应中的 JSON
- 使用已解析的数据发送指示成功的通量操作。
我目前用于执行此操作的代码如下。
getThingsFromServer() {
return getConfigIfNeeded().then(() => {
dispatchStartOfRequestAction();
return window.fetch(`${store.baseURL}/resource`)
.then((response) => {
if(response.ok) {
return response.json();
} else {
return Promise.reject(new Error(`${response.status} ${response.statusText}`));
}
}, (error) => {
return Promise.reject(new Error(`Network error: ${error.message}`));
})
.then((data) => {
dispatchSuccessAction(data);
}, (error) => {
return Promise.reject(new Error(`JSON parse error: ${error.message}`));
})
.catch((error) => {
dispatchFailureAction(error)
});
});
}
我希望能够单独处理许多错误情况,之后我想调度失败操作(在 catch() 中完成)。
目前,如果单个then() 错误处理程序之一被调用,则在最终调用catch() 之前,还会调用每个后续的then() 错误处理程序。我只想要一个单独的处理程序并调用 catch。
我可以放弃单独处理每个错误并在其末尾使用单个 catch,但各种来源都支持和诋毁在承诺链末端以相同方式处理所有这些不同错误的做法。是否有超出个人意见的“正确”答案?
【问题讨论】:
-
这个问题可能更适合codereview.stackexchange.com,似乎与 SO 无关
-
您还想对来自
getConfigIfNeeded的错误进行处理吗?还是从不拒绝?
标签: javascript asynchronous promise