【发布时间】:2019-03-28 20:18:54
【问题描述】:
为什么下面的代码会返回一个包含observable 的promise?
const queryApi = (request: AxiosRequestConfig): Observable<ParsedData> => {
return new Observable(observer => {
axios(request).then(response => {
observer.next(response);
observer.complete();
}).catch(error => {
observer.error(error);
})
}).pipe(map(value => {
const parser = new Parser(name);
const response = value as AxiosResponse;
return parser.parse(response.data);
}));
}
const sourcePromise: Promise<ParsedData> = queryApi(request, 1).toPromise();
await sourcePromise.then(source$ => {
source$.subscribe((value: ParsedData) => console.log(JSON.stringify(value, null, 2)));
}).catch(error => console.log(error));
我期待代码:
- 使用
axios查询 API - 使用
axios解析的值创建一个 observable - 将可观察到的管道传递给返回
observable的map运算符 - 将返回的
observable转换为promise - 解析
promise公开数据。
【问题讨论】:
-
我认为这可能与未完成有关,但如果你想得到一个承诺,为什么不首先返回一个承诺
-
我没有使用过打字稿,但看起来你没有调用承诺,只是引用它。
sourcePromise.then->sourcePromise().then -
你是说
parser.parse返回一个observable? -
你为什么在这里使用 observables?你正在把一个承诺变成一个可观察的,然后把它变成一个承诺。直接使用 Promise 让你的代码更简单。
-
该代码究竟在哪里“返回一个包含可观察对象的承诺”?
标签: javascript typescript rxjs