当前位置: 首页 > 知识库问答 >
问题:

promise如何与#then和#json一起工作?

潘慈
2023-03-14

我不明白为什么第一个例子有效,但第二个不有效。我相信这与调用json将响应解析为javascript对象有关?那么它返回一个promise,必须放在一个然后函数中?我得到这个是因为在第三个例子中抛出的错误。#json到底是做什么的?

export const promiseErrorMiddleware = store => next => action => {
  const url = action.url
  const fetchName = action.fetchName
  return Promise.resolve(fetch(url)).then((response) => {
    return response.json()
  }).then((data) => {
    store.dispatch({data: data, needDirection: true, fetchName: fetchName })
  })
}

//works

export const promiseErrorMiddleware = store => next => action => {
  const url = action.url
  const fetchName = action.fetchName
  return Promise.resolve(fetch(url)).then((response) => {
    store.dispatch({data: response.json(), needDirection: true, fetchName: fetchName })
  })
}

//doesn't work

export const promiseErrorMiddleware = store => next => action => {
  const url = action.url
  const fetchName = action.fetchName
  return Promise.resolve(fetch(url)).then((response) => {
    console.log(resopnse.json())
    return response.json()
  }).then((data) => {
    store.dispatch({data: data, needDirection: true, fetchName: fetchName })
  })
}

//throws error

共有1个答案

公西苗宣
2023-03-14

响应。json()返回一个promise。你不能立即使用它的结果,你必须等待promise的解决。

此外,您不需要使用Promise。解析()fetch()已返回promise。

而不是写{data:data}你可以只写{data}。这称为速记属性名。

第三个示例抛出一个错误,因为不能两次调用json()方法。

 类似资料:
  • 问题内容: 继续我提出的问题,我试图在我的代码库中使用ThreadPoolExecutor。即使反复尝试从Java API文档中理解,我也无法清楚地理解keepAliveTime要在构造函数中传递的参数的功能/目的。希望有人可以通过一些很好的例子向我解释。 Java文档摘录: keepAliveTime-当线程数大于内核数时,这是多余的空闲线程将在终止之前等待新任务的最长时间。 问题答案: 假设您

  • 我想知道是否有人可以帮助我理解如何将转换表合并到Hypermax算法中。任何示例、伪代码、技巧或实现参考都将不胜感激! 一点背景: Hypermax是一种递归游戏树搜索算法,用于n人游戏,通常用于3人游戏。它是最小最大和α-β修剪的扩展 通常,在游戏树中的每个节点,当前玩家(选择者)将查看其可以做出的所有移动,并选择一个最大化其自身效用的移动。不同于最小值/最大值 我理解换位表是如何工作的,但我不

  • 我已经在Angular 2上使用ImmutableJS有一段时间了,因为它在变化检测方面的性能优势。看这里。 然而,我不太清楚,为什么Immutable在默认情况下与Angular 2一起工作。当没有显式数组时,它如何知道如何迭代值并显示它们?它是否每次访问集合的值时都调用?它实现了Angular 2自动调用的某种方法吗? 如果是这样的话,有没有一种方法可以定义您自己的集合来实现这个方法? 例如:

  • 我试图在一个我的组件中使用Tesseract来执行文件上的ocr。 .ts: .html 我遵循了这个,但是这个错误显示了 我应该怎么做才能让这个工作成功?

  • 我只是很难让我的控制器单元测试正常工作,因为在我看来,如果使用OAuth,SpringDoc中的内容是不够的。在我的例子中,是Oauth2和JWT。 我尝试使用,,甚至使用和自定义定义我自己的注释,但在计算安全表达式时,总是在UserSecurityContext中获得匿名用户,无论我在工厂中设置测试上下文的是什么。。。 我提出了我刚刚想到的解决方案,但由于我不确定嘲笑令牌服务是最有效/干净的方法

  • 我的pom。xml如下所示 我已经尝试了三天,使用REdhat入门指南让这个简单的示例代码与Infinispan一起使用,并下载了快速入门zip来运行它,但仍然不起作用!我一直收到Spring JMS的错误“无法连接到foo: 11222”或“池未打开”,然后是关于混合Uber和Jars版本的警告。我开始使用ehcache,这很难实现,因为只有有限的简单示例展示了如何从rest调用等中存储、检索和