rxjs5 toPromise 不起作用

Tos*_*Pig 12 javascript rxjs5

在以下示例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)

希望它可以帮助某人。

  • .pipe(take(1)) 让我的承诺发挥作用 ng9.1.1 rxjs6.5.3 (2认同)