在Fetch中返回Promise.Reject()

时间:2018-04-17 11:56:53

标签: javascript reactjs typescript es6-promise fetch-api

我正在使用React构建应用程序,我想要做的是在某些条件发生时将获取作为被拒绝的Promise返回。这是我的代码(部分):

return (fetch(controllerURI, {
        method: 'post',
        headers: { 'Content-Type': 'application/json; charset=utf-8' },
        body: JSON.stringify({
            "userId": this.state.userEmailAndName.userId,
            "name": this.state.userEmailAndName.name,
            "newEmail": this.state.userEmailAndName.newEmail
        })
    })
        .then(response => response.json()).then(data => {
            if (data.code == "ER")
                Throw new Error("ERROR");
    })
        .catch(e => {
            console.log("Inside catch");
            // This catch caught the Throw Error in .then().
    })
);

所以,基本上,如果' data.code'等于" ER" (错误),我希望将获取评估为拒绝。

在应用程序的其他一些方面,我是一个Promise.All调用我刚刚写完的返回提取方法。

let fetch1 = this.handleEmailAndNameSubmit(undefined, true);
let fetch2 = this.handlePasswordSubmit(undefined, true);

Promise.all([fetch1, fetch2]).then(() => {
    (this.state.lastLinkClicked).click();
}));

编辑:第一个问题是结果(或者至少是它发生的原因)..

使用catch语句,“抛出新错误”#39;被它捕获,并且Promise.all可以输入它的.then()..但是我想保留那个catch语句,因为如果获取因为任何没有连接到data.code的原因而失败(就像不可能一样)要连接到URI,我需要抓住问题并显示正确的消息。

1 个答案:

答案 0 :(得分:2)

从运行时的角度来看(暂时忽略TypeScript的类型),从throw new Error('foo');处理程序内部完成时,return Promise.reject(new Error('foo'));.then()完全相同。

你无法抛弃一个Promise并且Promise.all().then()仍被调用,Promise.all()将拒绝第一次拒绝传递的Promise数组。

throw应该是安全的,请确保您实际点击throw,并确保您Promise.all()正确的承诺。