微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Redux-Observable:find() 不返回任何内容

如何解决Redux-Observable:find() 不返回任何内容

我对 RxJs 非常陌生,到目前为止只使用过 Redux (+Thunk),所以我试图了解一切是如何协同工作的。我目前正在尝试使用从登录表单提交的数据从源(json 文件)中获取用户

authEpic.js

    import users from '../api/users.json';
    
    const source = of(users);
    
    export const authEpic = (action$) => action$.pipe(
    ofType("AUTH_LOGIN_REQUEST"),switchMap(({ authData }) => source.pipe(
        find(user => authData.email === user.email && authData.password === user.password),map(user => ({ type: "RESULTS",results: user }))
    ))
);

但是即使它说作为属性返回的值也没有返回任何内容。我想了解如何找到用户并将其传递给另一个操作,因为尽管四处寻找,但我目前几乎一无所知。

非常感谢您的帮助!

解决方法

问题在于 of(users) 发出单个值:无论 users 是什么,大概都是一个数组。因此,在您的 find() 中,参数 user 实际上是完整的 users,而不是单个用户,因此 users.email === undefinedfind() 运算符的作用与 Array 的 find() 类似,因为它始终返回(发出)单个值,因此如果未找到任何内容,则返回(发出)的值实际上就是值 {{1 }}。这就是这里发生的事情。您正在发出一个操作 undefined

如果 { type: 'RESULTS',results: undefined } 确实是一个数组,您可能希望使用 users 以便每个用户都由 Observable 一一发出。然后它就像我想象的那样工作。这是一个演示:https://stackblitz.com/edit/redux-observable-playground-rararm?file=index.js

如果这最终成为生产代码,您将需要处理找不到用户匹配项的情况。


顺便说一句,我认为这不是生产代码(将所有密码以明文形式作为本地 json 文件)但对于阅读本文的任何人来说,仍然需要注意的是,在这种特殊情况下,它可能会有所帮助使用数组而不是 Observable 更清楚:

from(users)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。