我有以下2种功能,试图从已设置的Express服务器端点从mongo数据库中获取数据。这段代码在我的React前端应用程序中。
export function getContacts() {
let data = fetch('/api/contacts').then((data) => {
return data.json();
}).catch(err => console.log(err));
return data;
}
以及随后的调用
const initialState = getContacts()
.then((body) => {
console.log('body: ');
console.log(body);
return body;
}).catch(err => console.log(err));
当我登录body
时,这是一个承诺。我期待从数据库中获取文档的json数组。我的getContacts()应该返回一个Promise,然后我在initialState中的回调从中获取数据。
答案 0 :(得分:0)
data.json()
调用实际上是按设计返回的承诺。看看文档页面here,了解原因。
您可以通过链接另一个then
调用或将函数声明为async
并使用await
来解决此问题。
答案 1 :(得分:-2)
.json()方法向您返回一个承诺,因为您在调用api时收到的响应是分阶段的,在这种情况下,标题将作为响应返回,因此将触发response.json(),并且您会收到承诺会得到尸体,但到目前为止您还没有收到尸体,而只是标头。
要获取身体,您需要像下面这样链接一个诺言
response.json().then(data => ({
data: data,
})