【问题标题】:Why is my function returning a promise and not an object from my db?为什么我的函数从我的数据库返回一个承诺而不是一个对象?
【发布时间】:2019-04-04 12:39:27
【问题描述】:

我有以下 2 个函数试图从我设置的快速服务器端点从 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() 应该返回一个承诺,然后我在 initialState 中的回调从中获取数据。

【问题讨论】:

  • 你得到一个Promise 因为fetch 返回一个Promise - 但是,body 永远不应该是一个 Promise - 这很奇怪,你确定你已经编写了你真正的代码使用它? initialState 将是一个承诺 - 但 body 在哪里你 console.log 它不会
  • @intA,正如您在评论部分下的 post 中提到的那样。似乎没有答案,因为您的后端服务器出现故障。请删除此问题以免污染 SO。谢谢!

标签: javascript reactjs express asynchronous promise


【解决方案1】:

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

您可以通过链接另一个then 调用或将您的函数声明为async 并使用await 来修复它。

【讨论】:

  • OP 正在调用另一个 .then ... getContacts().then((body) 并声称 body 是一个 Promise ... 它不会是
  • @JaromandaX 我认为情况并非如此。 OP 正在从getContacts() 返回data(获取)。那时,当链接的then 被解析时,它应该得到传递的原始承诺。所以body 应该是Response interface 的一个实例。除非我错过了什么?
  • 是的,我引用的那段代码 - 显然你不明白 promises 是如何链接的
  • @JaromandaX 嗯,好的。似乎body 在我登录时未定义。但是为什么该值没有存储在 initialState 中?
  • 你说这是一个承诺。现在它是未定义的。这是浏览器代码吗?如果是这样,请检查开发人员工具控制台和网络选项卡以了解发生了什么
猜你喜欢
  • 2016-02-04
  • 2017-06-19
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 2016-12-13
  • 1970-01-01
相关资源
最近更新 更多