zoukankan      html  css  js  c++  java
  • blob转json angular代码

      前端实现下载功能,比如下载zip包,excel等,需要将请求的返回类型设置为blob。

      如果是正常情况,可以代码中加入a标签来实现blob文件流的下载。 但是异常情况,rest接口返回的json格式的提示信息也成了blob格式的数据,我们想在界面展示提示信息,就必须将blob转换为json。

    this.download(name).subscribe()(
       res => {
    
       }, 
       err => {
          let reader = new FileReader();
          reader.onload = e => {
             let msg = JSON.parse(e.target["result"] as string)
          };
          reader.readAsText(err._body);
          
          console.log("");
          ...
       },
       () =>{
    
      }
    );
    

      我的理解,js,rxjs中各种的回调,异步。 reader.onload注册的是一个回调,reader.readAsText执行后会接着往下执行,但是也会去调用reader.onload的函数。

           e.target["result"]就是rest异常情况下返回的json转成的blob对象。

           e.target["result"]后面还加了as string,不加as string会报语法错误,string | array无法转换为string。

           () => 就和java中的finally一样,最后会被执行。

           rxjs的异步处理,如果有2个rest,第2个的处理依赖于第1个请求的结果。   就需要异步转同步,用await,或者写成下面2个rest请求嵌套的格式,不确定有没有更好的方法。

           按顺序写2个subscribe,可能执行到第2个subscribe了,第1个的结果还未返回,无法正确的根据第1个的结果来做判断了。

    this.download(name).subscribe()(
       res => {
          this.post(name).subscribe(){
             res => {
          
             }
          }
       }, 
       err => {
         // do nothing, just alter
       },
       () =>{
    
      }
    );
    

      

  • 相关阅读:
    2019年9月15日晚间测试-T1
    机房巨佬的随机名称生成器
    初来乍到
    GKurumi记
    GKurumi记
    小P的团战
    什么才算是真正的编程能力?
    java冒泡排序和快速排序
    “转行做程序员”很难?这里有4个重要建议
    Linux文件I/O(一)
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/13676253.html
Copyright © 2011-2022 走看看