如果我有一个方法有时会返回一个字符串,有时会返回一个产生字符串的promise,该如何将其链接到我的可观察对象中?
示例
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));
我想始终登录“测试”。
答案 0 :(得分:1)
解决问题的一种方法是使传递给mergeMap
的函数成为async
函数,并传递给await
的{{1}}的返回值,如下所示:< / p>
doSomething
之所以可以这样做,是因为const example = of(undefined).pipe(
mergeMap(async () => await doSomething())
);
希望函数返回一个mergeMap
,并且Promise是有效的ObservableInput
。
这样做是利用ObservableInput
会接受诺言或普通值的事实-await
函数返回的诺言将解析为该值。
答案 1 :(得分:0)
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方法应始终返回相同的值类型,即字符串或Promise。