如果我有一个方法,有时会返回一个字符串,有时会返回一个导致字符串的承诺,那么我如何在我的可观察范围内将其链接起来呢?
示例
function doSomething() {
if (Math.random() < 0.5) {
return 'test';
}
return new Promise(resolve => resolve('test'));
}
const example = of(undefined).pipe(
mergeMap(() => doSomething())
);
const subscribe = example.subscribe(val => console.log(val));我想永远记录“测试”。
发布于 2018-08-13 00:27:44
解决该问题的一种方法是将传递给mergeMap的函数变为async函数,并将doSomething的返回值设置为await,如下所示:
const example = of(undefined).pipe(
mergeMap(async () => await doSomething())
);您可以这样做,因为mergeMap希望函数返回一个ObservableInput,并且承诺是一个有效的ObservableInput。
这样做就利用了这一事实,await将接受一个承诺或一个普通值-- async函数返回的承诺将对此进行解析。
发布于 2018-08-09 07:53:36
function doSomething() {
if (Math.random() < 0.5) {
return 'test';
}
return new Promise(resolve => resolve('test'));
}
const example = of(undefined)
.pipe(
map(() => doSomething()),
mergeMap(value => value instanceof Promise ? from(value) : from([value]))
);
const subscribe = example.subscribe(val => console.log(val));
不是你问的,但你的代码是反模式的。您的doSomething方法应该始终返回相同的值类型,在您的情况下,可以是字符串,也可以是承诺。
https://stackoverflow.com/questions/51757381
复制相似问题