如何在从 Fetch Api 返回的 Promise 对象中获取错误值?
Posted
技术标签:
【中文标题】如何在从 Fetch Api 返回的 Promise 对象中获取错误值?【英文标题】:How can i get errors value inside Promise object which return from Fetch Api? 【发布时间】:2017-03-18 01:40:11 【问题描述】:我有这样的获取请求。
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());
我知道了
但似乎 Promise 功能无法锻炼。
那么如何在 [[PromiseValue]] 中获取错误对象?
谢谢!
【问题讨论】:
为什么是双then
?
【参考方案1】:
要从 Promise 中获取错误,您可以这样做:
promise.then(function(data)
, function(error) ...
或
要得到 promise 错误,你也可以使用 .catch() 块
.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"
);
你可以这样写你的代码:
fetch(deafaultUrl + '/v1/users/',
headers:
'Content-Type': 'application/json'
,
method: "POST",
body: JSON.stringify(userInfoParams)
)
.then(function(response)
// if request is successful
.catch(err)
// if got error
);
【讨论】:
【参考方案2】:我找到了response.json()
只能读取一次的解决方案,如果我得到console.log(response.json());
它工作正常。
【讨论】:
这是正确的。如果您想多次阅读,则需要克隆响应 (developer.mozilla.org/en-US/docs/Web/API/Response/clone)。顺便说一句,这不是记录它的正确方法。 console.log(response.json()) 会记录 json() 函数返回的 promise,但是你想记录结果,所以 response.json().then(data => console.log(data))。 【参考方案3】:这里是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);
);
【讨论】:
这不起作用,即使我收到错误422
响应它仍然进入第一个块而不是第二个块。
去检查什么是422
错误。错误在您的电话中以上是关于如何在从 Fetch Api 返回的 Promise 对象中获取错误值?的主要内容,如果未能解决你的问题,请参考以下文章
在 JavaScript 中使用 fetch() 时,如何将返回对象的详细信息呈现到 html 页面上
如何在从 Meteor.method 返回之前等待子流程结果