API在React Native应用中获取响应Blob结构

时间:2019-07-18 14:43:55

标签: reactjs react-native blob fetch

我正在使用React Native Android项目中的Web API。将我的本机版本更新为0.60.3后,我的响应数据未返回JSON,而是返回了Blob数据结构。

这是我从 then(res => {...})

中获得的信息

请看图片

Screen-Shot-2019-07-18-at-17-25-10.png

_bodyInit 对象返回JSON。但是现在它返回 Blob ,这是我无法从Js代码到达的。

我尝试使用函数 res.json() res.text() 他们工作了!但是这次我只是在 _bodyInit 中获取了数据。我找不到其他参数,例如 ok header 等。

这是我尝试过的。就像我说的,有效。但是它只返回我的数据,而不返回其他参数,例如 ok headers 等。

func loadXib() -> UIView? {
    guard Bundle.main.path(forResource: "View", ofType: "nib") != nil else {
        // file not exists
        return nil
    }

    if let view = Bundle.main.loadNibNamed("View",
                                           owner: self,
                                           options: nil)?.first as? UIView {
        return view
    }

    return nil
}

在“ devtools”中,如果我单击“ _bodyInit”对象。模拟器在下面给出错误。

Screen-Shot-2019-07-18-at-17-32-49.png

您有解决此问题的想法吗? 预先感谢!

2 个答案:

答案 0 :(得分:0)

ok属性具有响应,然后才能在其上调用json方法。如果您的响应包含json,请调用json以将主体序列化为json,如果响应包含blob,请调用.blob来将主体序列化为blob。查看响应here的更多属性。

.then((res) => {
    console.log("response.ok", res.ok)

    // print headers,
    console.log("headers", res.headers.forEach(item=>console.log(item)))

    // if response if json, call res.json
    return res.json()
})
.then((res) => {
   // here you will only get json data, not other properties.
   console.log("json data is ", res)
});

答案 1 :(得分:0)

已解决 我发现了两种解决此问题的方法。

  1. 使用 .json()
  2. 后使用 .then()
.then((res) => {
 if (res.ok) {
  res.json().then(res=>{
   console.log(res)
  })
 } else console.log("not ok")
});
  1. 使用 异步 等待
.then(async res => {
 if(res.ok) {
   const response = await res.json()
   console.log(response)
 } else console.log("not ok")
})

很高兴看到您提出其他解决方案。谢谢。