Angular 角度HttpClient get do text,而不是json
我正在尝试在我的Angular 角度HttpClient get do text,而不是json,angular,ionic-framework,Angular,Ionic Framework,我正在尝试在我的HttpClient中为我的get请求禁用自动响应解析到json。然而,每次我设置 return this.http.get(requestURL, { responseType: 'text' }).pipe( map((response: Response) => { console.log(response); }) ); 我的VSCode终端在管道上展开,包括红色括号,我得到 error TS2345: Argument of type 'Op
HttpClient
中为我的get
请求禁用自动响应解析到json
。然而,每次我设置
return this.http.get(requestURL, {
responseType: 'text'
}).pipe(
map((response: Response) => {
console.log(response);
})
);
我的VSCode终端在管道上展开
,包括红色括号,我得到
error TS2345: Argument of type 'OperatorFunction<Response, void>' is not assignable to parameter of type 'OperatorFunction<string, void>'
错误TS2345:类型为“OperatorFunction”的参数不能分配给类型为“OperatorFunction”的参数
???我正在跟踪文档。我的版本错了吗
------编辑------
经过下面的建议,我得到了这个
map((response: Response) => {
return this.parseData(response.text());
})
error TS2345: Argument of type 'Promise<string>' is not assignable to parameter of type 'string'.
map((响应:响应)=>{
返回此.parseData(response.text());
})
错误TS2345:类型为“Promise”的参数不能分配给类型为“string”的参数。
[ng]类型“响应”不可分配给类型“字符串”。
你忘了用“等待”吗
其中,
parseData
将字符串作为输入。问题在于您没有从RxJS操作符返回任何内容。您至少需要返回响应
:
return this.http.get(requestURL, {
responseType: 'text'
}).pipe(
map((response: Response) => {
console.log(response);
return response;
})
);
这将类似于Array.prototype.map
,如果不返回任何内容,就TypeScript而言,可能会出现某种编译错误
实际上,这里根本不需要map
,因为它用于转换/投影/映射发射的值。如果您试图执行副作用操作,如console.log()
,则应改用以下运算符:
更新:
听起来您在尝试将承诺
传递给只需要字符串
的函数时收到了一个新错误。这来自response.text()
。如果您确实需要执行方法text()
,则可以使用运算符来解析承诺:
return this.http.get(requestURL, {
responseType: 'text'
}).pipe(
switchMap((response) => response.text()),
map((text) => this.parseData(text))
);
希望这有帮助 问题是您没有从RxJS操作符返回任何内容。您至少需要返回
响应
:
return this.http.get(requestURL, {
responseType: 'text'
}).pipe(
map((response: Response) => {
console.log(response);
return response;
})
);
这将类似于Array.prototype.map
,如果不返回任何内容,就TypeScript而言,可能会出现某种编译错误
实际上,这里根本不需要map
,因为它用于转换/投影/映射发射的值。如果您试图执行副作用操作,如console.log()
,则应改用以下运算符:
更新:
听起来您在尝试将承诺
传递给只需要字符串
的函数时收到了一个新错误。这来自response.text()
。如果您确实需要执行方法text()
,则可以使用运算符来解析承诺:
return this.http.get(requestURL, {
responseType: 'text'
}).pipe(
switchMap((response) => response.text()),
map((text) => this.parseData(text))
);
希望这有帮助 谢谢!请参阅我上面的后续编辑。我最初有一个解析函数来解析传入的自定义数据。但是,不是我得到了另一个。@ElDude错误是解析文本需要一个字符串,但您传递的是一个承诺。当响应到达map操作符时是否已经是文本?如果是这样,您可以将响应传递给helper函数。如果必须执行text(),则需要首先解决该问题,这可以通过另一个操作符(如switchMap)完成。我可以显示您是否对此有问题。@ElDude我已更新了答案,以显示如何使用另一个RxJS操作符,例如
switchMap
来执行和解析text()
,以便将其传递到parseData()
。谢谢!现在看起来更好了,但现在它会逐字符解析字符串。。。哈哈:结果我不得不删除你建议的switchMap
,只需将我的代码更改为map((响应:string)=>…)
就可以了。非常感谢你的帮助!谢谢请参阅我上面的后续编辑。我最初有一个解析函数来解析传入的自定义数据。但是,不是我得到了另一个。@ElDude错误是解析文本需要一个字符串,但您传递的是一个承诺。当响应到达map操作符时是否已经是文本?如果是这样,您可以将响应传递给helper函数。如果必须执行text(),则需要首先解决该问题,这可以通过另一个操作符(如switchMap)完成。我可以显示您是否对此有问题。@ElDude我已更新了答案,以显示如何使用另一个RxJS操作符,例如switchMap
来执行和解析text()
,以便将其传递到parseData()
。谢谢!现在看起来更好了,但现在它会逐字符解析字符串。。。哈哈:结果我不得不删除你建议的switchMap
,只需将我的代码更改为map((响应:string)=>…)
就可以了。非常感谢你的帮助!