angular 内的代码订阅不等待 API 响应到来
code inside angular subscribe not waiting for API response to come
angular 内的代码订阅不等待 API 响应完成?是否仅等待 API 响应状态代码而不是实际响应值?
我有一个 API,它通常会给出 RSA public 密钥(字符串)作为响应。我正在从 Angular(版本 8)ts 文件中调用 API。
//For fetching public key from API response
this.authService.publicKeyGen(identifier).subscribe(
res => {
console.log("fooooo..."); NOT PRINTING / NOT EXECUTING
pubKey = res;
},
(e => console.log('error: ', e)),
(() => console.log('the sequence completed!')) PRINTING / EXECUTING
);
public publicKeyGen(identifier) {
let url = this.authUrl + "/v1/keys/generate";
return this.http.get(url, {
params: { identifier : identifier}
});
}
虽然 API 调用成功(状态代码 200),但它没有进入“res”,我无法获得响应值。
注意:实际上 API returns 成功代码首先是 200,然后在一小段延迟后给出响应数据。在订阅内部,我无法从响应值设置 public 键,因为 API 调用成功(200),但 API 响应数据仍然不可用并且未执行“res " 部分尽管它进入订阅内部,因为 API 状态代码已经出现。
请帮忙。
API 响应 -
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTqMCDom4QjKFoucN/Wa5CJ+eECcs2Q7V5uAWH4DUc1F3+02LsWOwWP5JKVLKOEBjybR50eKpGLsTwnIUNeh8oRsq7l4YAaeYDSrbkij62m8tsPyMwleeD3jIc8RlAD7Zt/bTvJGMA/W6hJJ0wf0kU2pmPuauGBIdeZqoYhRNCqwIDAQAB
您的 publicKeyGen
方法是否驻留在 auth.service.ts
文件中?
此外,最好将 return 值添加到 publicKeyGen
签名,如下所示:
public publicKeyGen(identifier): Observable<string> {
let url = this.authUrl + "/v1/keys/generate";
return this.http.get(url, {
params: { identifier : identifier}
});
}
尝试为 headers 设置 responseType 以验证它是来自服务器的响应类型。
public publicKeyGen(identifier) {
let url = this.authUrl + "/v1/keys/generate";
const headers = new HttpHeaders().set('Content-Type', 'text/plain');
return this.http.get(url, { headers, responseType: 'text'});
}
如果它是纯字符串,那么将打印控制台日志。您可以使用下面的解析方法将其转换为 JSON
const pubKey = JSON.parse(res);
快乐编码..:)
angular 内的代码订阅不等待 API 响应完成?是否仅等待 API 响应状态代码而不是实际响应值?
我有一个 API,它通常会给出 RSA public 密钥(字符串)作为响应。我正在从 Angular(版本 8)ts 文件中调用 API。
//For fetching public key from API response
this.authService.publicKeyGen(identifier).subscribe(
res => {
console.log("fooooo..."); NOT PRINTING / NOT EXECUTING
pubKey = res;
},
(e => console.log('error: ', e)),
(() => console.log('the sequence completed!')) PRINTING / EXECUTING
);
public publicKeyGen(identifier) {
let url = this.authUrl + "/v1/keys/generate";
return this.http.get(url, {
params: { identifier : identifier}
});
}
虽然 API 调用成功(状态代码 200),但它没有进入“res”,我无法获得响应值。
注意:实际上 API returns 成功代码首先是 200,然后在一小段延迟后给出响应数据。在订阅内部,我无法从响应值设置 public 键,因为 API 调用成功(200),但 API 响应数据仍然不可用并且未执行“res " 部分尽管它进入订阅内部,因为 API 状态代码已经出现。
请帮忙。
API 响应 - MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTqMCDom4QjKFoucN/Wa5CJ+eECcs2Q7V5uAWH4DUc1F3+02LsWOwWP5JKVLKOEBjybR50eKpGLsTwnIUNeh8oRsq7l4YAaeYDSrbkij62m8tsPyMwleeD3jIc8RlAD7Zt/bTvJGMA/W6hJJ0wf0kU2pmPuauGBIdeZqoYhRNCqwIDAQAB
您的 publicKeyGen
方法是否驻留在 auth.service.ts
文件中?
此外,最好将 return 值添加到 publicKeyGen
签名,如下所示:
public publicKeyGen(identifier): Observable<string> {
let url = this.authUrl + "/v1/keys/generate";
return this.http.get(url, {
params: { identifier : identifier}
});
}
尝试为 headers 设置 responseType 以验证它是来自服务器的响应类型。
public publicKeyGen(identifier) {
let url = this.authUrl + "/v1/keys/generate";
const headers = new HttpHeaders().set('Content-Type', 'text/plain');
return this.http.get(url, { headers, responseType: 'text'});
}
如果它是纯字符串,那么将打印控制台日志。您可以使用下面的解析方法将其转换为 JSON
const pubKey = JSON.parse(res);
快乐编码..:)