在以下示例中,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));发布于 2017-04-10 16:26:56
已经解决的https://github.com/ReactiveX/rxjs/issues/2536
toPromise本质上就是observable.last().subscribe()
如果你在调用toPromise之前添加.take(1),那么事情就会开始了。
即
example.do((value)=>console.log('do!!!',value)).take(1).toPromise()发布于 2019-10-25 00:57:13
在较新的版本中,必须在pipe()中使用take(1)。我做了这样的代码:
async getPromise() {
return await example
.pipe(take(1))
.toPromise();
}希望这能帮助到别人。
https://stackoverflow.com/questions/43313799
复制相似问题