承诺是如何与#then和#json一起工作的?
how do promises work with #then and #json?
我很困惑为什么第一个例子可以工作,但第二个却不行。我相信它与调用json将解析响应到javascript对象?那么它返回的承诺必须放入then函数中?我得到这个是因为在第三个例子中抛出的错误。#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
response.json()
返回承诺。你不能立即使用它的结果,你必须等待承诺解决。
同样,您不需要使用Promise.resolve()
。fetch()
已返回承诺
不写{data: data}
,只写{data}
。这被称为简写属性名。
第三个例子抛出了一个错误,因为你不能两次调用json()
方法。
相关文章:
- 无法将JSON.parse与JSON_encode中的结果一起使用
- jqgrid json数据无法与jsondecode一起使用
- 如何使用AngularJS将if语句conditon与json响应一起使用
- Datatables-两个不同的json源在一起
- 使用php解析xml并将其转换为json以与$.ajax一起使用时遇到问题
- 与restify一起,我的帖子显示了一个“;将循环结构转换为JSON”;错误
- 撇号标记在javascript字符串中与Backslash一起发送,该字符串使用ajax作为json对象的一部分发送到p
- 将json值组合在一起并创建csv
- javascript中解析粘在一起的json
- 如何加载JSON数据以将其与select2插件一起使用
- 当连接在一起时,如何使用两个部分构建 JSON 对象,生成正确的 JSON 数据路径
- 安装 gdal 以与拓扑 json 和 D3 一起使用
- 将大型 JSON 文件与 d3.js 一起使用会导致大量性能下降/崩溃
- 如何一起解析另一个 JSON 中的 JSON
- 为什么 $.getJson 不能与 json 或 jsonp 一起使用
- 将 Json 文件存储在 AngularJS 变量中,以便与“ng-repeat”一起使用
- 脚本不加载:将AngularJS与JSON(Firebase)一起使用
- 如何转换 CakePHP json 以与 JS JIT SpaceTree 一起使用
- 有没有一种方法可以将json文件与所有其他js文件一起加载
- ajax json同步无法与设置为false的async一起工作