为什么我的函数返回一个Promise而不是我的db对象?

时间:2019-04-04 03:34:46

标签: javascript reactjs express asynchronous promise

我有以下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中的回调从中获取数据。

2 个答案:

答案 0 :(得分:0)

data.json()调用实际上是按设计返回的承诺。看看文档页面here,了解原因。

您可以通过链接另一个then调用或将函数声明为async并使用await来解决此问题。

答案 1 :(得分:-2)

.json()方法向您返回一个承诺,因为您在调用api时收到的响应是分阶段的,在这种情况下,标题将作为响应返回,因此将触发response.json(),并且您会收到承诺会得到尸体,但到目前为止您还没有收到尸体,而只是标头。

要获取身体,您需要像下面这样链接一个诺言

response.json().then(data => ({
    data: data,
})