首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJS:条件映射或mergeMap

RxJS:条件映射或mergeMap
EN

Stack Overflow用户
提问于 2018-08-09 00:41:44
回答 2查看 6.4K关注 0票数 7

如果我有一个方法,有时会返回一个字符串,有时会返回一个导致字符串的承诺,那么我如何在我的可观察范围内将其链接起来呢?

示例

代码语言:javascript
复制
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));

我想永远记录“测试”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-13 00:27:44

解决该问题的一种方法是将传递给mergeMap的函数变为async函数,并将doSomething的返回值设置为await,如下所示:

代码语言:javascript
复制
const example = of(undefined).pipe(
  mergeMap(async () => await doSomething())
);

您可以这样做,因为mergeMap希望函数返回一个ObservableInput,并且承诺是一个有效的ObservableInput

这样做就利用了这一事实,await将接受一个承诺或一个普通值-- async函数返回的承诺将对此进行解析。

票数 3
EN

Stack Overflow用户

发布于 2018-08-09 07:53:36

代码语言:javascript
复制
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方法应该始终返回相同的值类型,在您的情况下,可以是字符串,也可以是承诺。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51757381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档