如何从Fetch Api返回的Promise对象中获取错误值?

时间:2016-11-04 09:19:19

标签: javascript promise fetch-api

我有这样的获取请求。

fetch(deafaultUrl + '/v1/users/',
        {
            headers: {
                'Content-Type': 'application/json'
            },
            method: "POST",
            body: JSON.stringify(userInfoParams)
        })
        .then(function(response) {
            console.log(response);
            console.log(response.json());

            // not working never go into this function
            response.json().then(function(value) {
                console.log('access promise');
                console.log(value); // "Success"
            });

            if (response.status !== 200 && response.status !== 201) {
                throw new Error("Bad response from server");
            }
        })
        .then(function(json){

            console.log("succeed json re");
            console.log(json);
            dispatch(update_user(json));

        }) 

所以当我安慰这个console.log(response.json());

我得到了这个

enter image description here

但看起来Promise功能似乎没有锻炼。

那么如何在[[PromiseValue]]中获取错误对象?

谢谢!

3 个答案:

答案 0 :(得分:2)

要从承诺中获取错误,您可以这样做:

File '../include/myclass.h'
Lines executed:11.05% of 173
Creating 'myclass.h.gcov'

OR

要获得承诺错误,您还可以使用.catch()块

promise.then(function(data) {
  }, function(error) {...}

永远不要去这个部分,因为服务器已经发送了响应

 .then(){...}
 .catch(){..}

您可以这样编写代码:

.then(function(response) {
            console.log(response);
            console.log(response.json());

            // not working never go into this function
            response.json().then(function(value) {
                console.log('access promise');
                console.log(value); // "Success"
            });

答案 1 :(得分:1)

以下是then(...)

的文档

您应该像这样使用它:

p.then(function(value) {
   // fulfillment
  }, function(reason) {
  // rejection
});

然后您的代码将如下所示

fetch(deafaultUrl + '/v1/users/', {
        headers: {
            'Content-Type': 'application/json'
        },
        method: "POST",
        body: JSON.stringify(userInfoParams)
    })
    .then(function(response) {
        //Land here if request is successful
        console.log(response);

        if (response.status !== 200 && response.status !== 201) {
            throw new Error("Bad response from server");
        }
    }, function(error){
        //Land here if request has an error
        console.log(error);
    });

答案 2 :(得分:1)

我找到response.json()只能读取console.log(response.json());只能读取一次的解决方案。