angular - 错误类型错误:您在预期流的位置提供了“未定义”。您可以在 Angular 服务中提供 Observable、Promise、Array 或 Iterable
问题描述
我编写了多种服务来访问不同的 API。为 post 编写的服务以某种方式工作,但出现此错误
错误类型错误:您在预期流的位置提供了“未定义”。您可以提供 Observable、Promise、Array 或 Iterable。在 subscribeTo (subscribeTo.js:27)
至于为 GET 方法编写的服务,显示了相同的错误,但我没有得到任何数据作为回报。这是我的服务
GetClientData(): Observable<ClientDto> {
let url_ = this.baseUrl + "https://xxxxxxxxxxxxxxxx/getClients";
url_ = url_.replace(/[?&]$/, "");
let options_ : any = {
observe: "response",
responseType: "blob",
headers: new HttpHeaders({
"Accept": "application/json"
})
};
return this.http.request("get", url_, options_).pipe(_observableMergeMap((response_ : any) => {
return this.processGetAllPermissions(response_);
})).pipe(_observableCatch((response_: any) => {
if (response_ instanceof HttpResponseBase) {
try {
return this.processGetAllPermissions(<any>response_);
} catch (e) {
return <Observable<ClientDto>><any>_observableThrow(e);
}
} else
return <Observable<ClientDto>><any>_observableThrow(response_);
}));
}
protected processGetAllPermissions(response: HttpResponseBase): Observable<ClientDto> {
const status = response.status;
const responseBlob =
response instanceof HttpResponse ? response.body :
(<any>response).error instanceof Blob ? (<any>response).error : undefined;
let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }};
if (status === 200) {
return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
let result200: any = null;
let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
result200 = resultData200 ? ClientDto.fromJS(resultData200) : new ClientDto();
return _observableOf(result200);
}));
} else if (status !== 200 && status !== 204) {
return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
}));
}
return _observableOf<ClientDto>(<any>null);
}
云功能
exports.getClients = functions.https.onRequest((req, res) => {
res.set('Access-Control-Allow-Origin', 'http://localhost:4200');
res.set('Access-Control-Allow-Methods', 'GET', 'POST');
res.set('Access-Control-Allow-Headers', 'Content-Type');
if (req.method === 'OPTIONS') {
res.end();
}
else
{
let allClients = [];
usersClients.get()
.then(snapshot => {
snapshot.forEach(doc => {
allClients.push(doc.data());
});
res.send(200, {
"data": allClients
})
})
.catch(err => {
console.log("Error getting data", err);
});
}
});
解决方案
这些方面的东西:
return this.http.get(url_, options_).pipe(
map(data => {
// Transform data here
}),
catchError(err => {
// Handle errors here
})
);
推荐阅读
- javascript - 如何在单击功能下捕获多个按钮并将内容发送到本地存储
- java - 有没有办法扩展 fxml 控制器
- django - 我遇到了一个错误,说“未找到“登录”的反向。'login' 不是有效的视图函数或模式名称。'
- unity3d - 统一的 SVG 不透明度
- python - “ModuleNotFoundError:没有模块命名
- angular - 如何以角度的静态方法注入平台ID
- javascript - JavaScript 文件未在 Flask 网页中加载
- azure - Azure 如何通过 VNET 内的私有 IP 调用 Azure Private Endpoint(Azure Private Link 服务)
- ios - Swift 5:AVPlayer 将多个音频文件叠加在一起
- python-3.x - Tornado websocket 服务器和 websocket 客户端同时在一个循环中与 AsyncIO