在以下示例toPromise中不起作用:
https://jsfiddle.net/tossp/nmf9jg32/
我的代码:
function getPostData() {
return fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(res => res.json())
}
var source = Rx.Observable.fromEvent(document.body, 'click');
var example = source.concatMap(
e => Rx.Observable.from(getPostData()),
(e, res, eIndex, resIndex) => res.title);
example.subscribe({
next: (value) => { console.log('subscribe!!!',value); },
error: (err) => { console.log('Error: ' + err); },
complete: () => { console.log('complete'); }
});
example.do((value)=>console.log('do!!!',value)).toPromise().then((value)=>console.log('toPromise!!!',value));
Run Code Online (Sandbox Code Playgroud)
Tos*_*Pig 23
已经解决https://github.com/ReactiveX/rxjs/issues/2536
toPromise 本质上是 observable.last().subscribe()
如果您.take(1)在打电话之前添加,toPromise那么事情就会开始起作用。
IE
example.do((value)=>console.log('do!!!',value)).take(1).toPromise()
Run Code Online (Sandbox Code Playgroud)
Ant*_*nen 13
在较新的版本中,您必须使用take(1)inside pipe()。我做了这样的代码:
async getPromise() {
return await example
.pipe(take(1))
.toPromise();
}
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助某人。
| 归档时间: |
|
| 查看次数: |
3737 次 |
| 最近记录: |