Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON.parse错误后未重新加载模块_Javascript_Angularjs_Json_Angular_Ecmascript 6 - Fatal编程技术网

Javascript JSON.parse错误后未重新加载模块

Javascript JSON.parse错误后未重新加载模块,javascript,angularjs,json,angular,ecmascript-6,Javascript,Angularjs,Json,Angular,Ecmascript 6,我有一个QA测试页面,我们的QA可以通过将json传递给模拟服务来复制服务器的行为。 当我使用有效的json时,一切都正常工作,但当我使用无效的json时,我会收到一个错误,这是正常的。我的问题是,在这个json错误之后,页面不再更新,即使使用了有效的json 以下是测试页面组件的摘录: export class QaTestComponent implements OnInit { modules: Module[]; pageState: PageState; mockModul

我有一个QA测试页面,我们的QA可以通过将json传递给模拟服务来复制服务器的行为。 当我使用有效的json时,一切都正常工作,但当我使用无效的json时,我会收到一个错误,这是正常的。我的问题是,在这个json错误之后,页面不再更新,即使使用了有效的json

以下是测试页面组件的摘录:

export class QaTestComponent implements OnInit {
  modules: Module[];
  pageState: PageState;
  mockModulesValue: string;
  mockPageStateValue: string;

  constructor(private moduleService: MockModuleService, private pageStateService: MockPageStateService) { }

  getModules() {
    this.moduleService.getModules().then(modules => this.modules = modules);
  }

  updateModules() {
    let jsonModules = JSON.parse(this.mockModulesValue);
    this.moduleService.setModules(jsonModules);
    this.getModules();
  }
以下是包含函数调用的html文件:

  <div class="qa-test-interface-setup-datas-type col-md-6">
    <h3 class="qa-test-interface-setup-datas-type-title">Modules</h3>
    <textarea name="" id="" cols="30" rows="10" class="qa-test-interface-setup-datas-type-textarea" [(ngModel)]="mockModulesValue"></textarea>
    <button class="qa-test-interface-setup-datas-type-button" (click)="updateModules()">Update</button>
  </div>

模块
更新
下面是模拟服务:

export class MockModuleService implements ModuleService {
  raw: Module[] = aJsonArray;
  response: Module[] = this.raw;

  setModules(mockModules: Module[]) {
    this.response = mockModules == null ? this.raw : mockModules;
  }

  getModules(): Promise<Module[]> {
    return Promise.resolve(this.response);
  }
}
导出类MockModuleService实现ModuleService{
原始:模块[]=aj射线;
响应:模块[]=this.raw;
setModules(模拟模块:模块[]){
this.response=mockModules==null?this.raw:mockModules;
}
getModules():承诺{
返回承诺。解决(此。响应);
}
}

我尝试记录日志,查看在发生错误后组件或服务中是否阻止了有效的mockModuleValues,但我可以看到它一直持续到getModules()。

因此,经过一些研究,我在try/catch中进行了json解析,以避免错误杀死我的订阅者

   updateModules() {    
     if(this.mockModulesValue) {
        try {
          let jsonModules = JSON.parse(this.mockModulesValue);
          this.moduleService.setModules(jsonModules);
          this.getModules();
        } catch(e) {
          alert(e);
        }
     }
   }