代码之家  ›  专栏  ›  技术社区  ›  mwieczorek

FETCH/AXIOS-在承诺解决之前下载大静态JSON文件不完整数据

  •  0
  • mwieczorek  · 技术社区  · 6 年前

    我在S3上托管了大型静态JSON文件,其中包含视频文件的脚本,我很难使用 fetch() Axios . JSON文件的大小在50-100KB之间,请求似乎在整个文件下载之前就已经完成了-开发人员控制台显示了状态为200的文件到达,但是我在浏览器中发现了错误:

    private subtitleUri: string = "https://static.edyoutoo.media/subtitles/167A0DFC566B971A/167A0DFC566B971A-O.json"
    
    // using fetch api
    async $fetch(): Promise<SubtitleEntity> {
        const blob = await fetch(this.subtitleUri)
        console.log(blob)
        const json = await blob.json()
        console.log(json)
        return json
    }
    
    // using axios
    async fetch(): Promise<SubtitleEntity> {
        const ax = Axios.create()
        try {
          const req = await ax.get(this.subtitleUri)
          console.log(req)
          return req.data
        } catch (err) {
          console.error(err)
        }
    }
    

    这个 SubtitleEntity

    在尝试之后,我在控制台中得到这个错误:

    Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://static.edyoutoo.media/subtitles/167A0DFC566B971A/167A0DFC566B971A-O.json. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). 
    

    我假设这是因为在整个数据到达之前,响应就已经结束了。 Postman 以测试请求并按预期传递数据。

    在Dev Tools的Network选项卡中,请求显示为响应代码200,数据是 所有这些,有时,它会显示以下错误:

    SyntaxError: JSON.parse: end of data when property name was expected at line 855 column 3 of the JSON data
    

    我做错什么了?我来自一个Java/C++背景,我们简单地将传入的数据收集到一个while循环中的字符缓冲区中,一旦请求完成,数据就被解析并返回给调用方。

    如何使用AXIOS库或FETCH API完成?为什么它要在请求结束前解决未来(承诺)?

    谢谢你的帮助。

    0 回复  |  直到 6 年前