gpt4 book ai didi

javascript - 将 API 请求从使用 Promise 迁移到 Observable(使用 axios)

转载 作者:行者123 更新时间:2023-12-02 21:36:56 27 4
gpt4 key购买 nike

最近,我一直在尝试在 React 应用程序中使用 rxjs 提取 API 请求,这是我提出的解决方案。

您对此有何看法?

有什么我应该遵循的良好做法吗?

如果有好的解决方案请告诉我。

import axios from 'axios';
import { Observable } from 'rxjs';

import './App.css';

export class App extends Component {
state = {
users: []
};
componentDidMount() {
const fetchUserSubscription$ = this.fetchUsersObservables();

fetchUserSubscription$.subscribe(data =>
this.setState({
users: data
})
);
}

fetchUsers = async () => {
const response = await axios.get(
'https://jsonplaceholder.typicode.com/users'
);
const data = response.data;
this.setState({ users: data });
};

fetchUsersObservables = () =>
new Observable(observer => {
axios
.get('https://jsonplaceholder.typicode.com/users')
.then(res => {
observer.next(res.data);
observer.complete();
})
.catch(err => observer.error(err));
});

render() {
const { users } = this.state;
return (
<div className="App">
{users.map(u => (
<ul key={u.id}>
<li>{u.name}</li>
</ul>
))}
</div>
);
}
}

export default App;

最佳答案

您不必手动将您的 promise 转换为可观察量。对于 rxjs > 6.0,您可以使用库中的 from 转换函数(注意,对于 rxjs < 6.0,有 fromPromise 函数)。

阅读来自 here in the documentation .

Creates an Observable from an Array, an array-like object, a Promise, an iterable object, or an Observable-like object.

import { from } from 'rxjs';
const promise = axios.get('https://jsonplaceholder.typicode.com/users')
const observable = from(promise);

优点是您不必编写任何自定义观察者,处理成功响应、错误响应和取消请求都已为您正确定义。

关于javascript - 将 API 请求从使用 Promise 迁移到 Observable(使用 axios),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60471598/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com