您好我在这里使用fetch:
export function fetchSomething() {
return ({fetch}) => ({
type: FETCH_SOMETHING,
payload: {
promise: fetch('/someUrl', {
credentials: 'same-origin',
}).then(response => response.json())
.then(function(response) {
if (response.status >= 400)
{
let error = new Error(response.statusText);
throw error;
}
return response;
})
}
});
}
如果该提取返回无效的json,则将拒绝整个promise并调度_ERROR操作 - 不会抛出任何异常。而不是异常,它会发出PromiseRejectionEvent。
但是,如果响应代码为> = 400,则抛出异常并调度_ERROR操作。
如何在不抛出异常的情况下检查状态代码时发出该事件并拒绝承诺?
由于
答案 0 :(得分:1)
好的,我发现了问题。我使用Bluebirdjs而不是默认浏览器Promise。
对于fetch,我使用isomorphic-fetch使用自己的Promise库,所以即使我已注册:
window.Promise = require('../common/configureBluebird');
isomorphic-fetch使用了不同的东西。 所以我切换到fetch-ponyfill,它默认使用window.Promise作为Promise,现在它正在工作。
因此,如果我在then()中抛出新的Error(),它将自动捕获并发出事件PromiseRejectionEvent