栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

单元测试时发生错误:“未捕获(承诺)语法错误:位置1的JSON中的意外令牌o”

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单元测试时发生错误:“未捕获(承诺)语法错误:位置1的JSON中的意外令牌o”

该错误

Unexpected token ... in JSON at position1
实际上意味着已将
JSON.parse
其应用于无效的JSON-随机字符串或强制转换为字符串的值根本不是字符串的值。

该消息

Unexpected token o ...
暗示解析的值很可能是对象-被强制转换为
[object ...]
字符串。

问题在这里清楚可见:

Response  body: ReadableStream    locked: true    __proto__: Object  bodyUsed: true  ...

此处的响应对象是全局

Response
构造函数的实例(Fetch
API的一部分),而是否存在
ReadableStream
清楚地表明了这一点。

在Fetch
polyfill中可以看到,所有这些

res.json()
都适用
JSON.parse
于某些值

this.json = function() {  return this.text().then(JSON.parse)}

这很可能

new ResponseOptions
是错误地提供给全局
Response
构造函数的对象,因此发生了错误。

Angular具有类似名称的

Response
类,该类从Fetch派生其接口,
Response
但显然不兼容。问题在于它从未被导入过,因此使用了global
Response
来代替。

怎么修

它应该是

import { Response, ResponseOptions, ... } from '@angular/http';

如何预防

全局变量在Typescript类型定义中声明,不能取消声明,但可以在自定义类型定义中重新声明:

定制文件

declare var Headers: undefined;declare var Request: undefined;declare var Response: undefined;declare var URLSearchParams: undefined;

使用全局变量而不是导入的同名Http类将导致类型错误:

TS2532:对象可能是“未定义”。

只要在Angular应用程序中未使用Fetch API,这就是理想的行为。

这不是 在Angular 4.3

HttpClient
中替换的问题,
Http
并且不使用与Fetch API相同名称的类



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437158.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号