我有一个中间件,可以在下一个操作运行之前转到刷新令牌,然后在访问令牌过期时运行另一个操作。
但是,如果我一次发出多个请求并且访问令牌已结束,我将尝试获取与请求一样多的刷新令牌。我正在检查状态中的 isLoading 属性以防止这种情况。但是请求之后,isLoading值在reducer中为true,在中间件中好像为false,所以一次又一次的请求。
我在 fetching_refresh_token 操作中发送 refreshTokenPromise,但我从来没有得到 state.refreshTokenPromise,它总是未定义的。
我肯定对国家有问题。
所以这是我的问题,如何访问中间件中不断变化的状态值?
刷新令牌中间件:(此版本多次命中端点)
import { AsyncStorage } from 'react-native';
import { MIN_TOKEN_LIFESPAN } from 'react-native-dotenv';
import moment from 'moment';
import Api from '../lib/api';
import {
FETCHING_REFRESH_TOKEN,
FETCHING_REFRESH_TOKEN_SUCCESS,
FETCHING_REFRESH_TOKEN_FAILURE } from '../actions/constants';
export default function tokenMiddleware({ dispatch, getState }) {
return next => async (action) => {
if (typeof action === 'function') {
const state = getState();
if (state) {
const expiresIn = await AsyncStorage.getItem('EXPIRES_IN');
if (expiresIn && isExpired(JSON.parse(expiresIn))) {
if (!state.refreshToken.isLoading) …Run Code Online (Sandbox Code Playgroud) 我创建了一个小社交网站,其中包含用户生成的内容。如果用户不喜欢自己发布的内容,他们应该可以选择阻止对方。
所以我使用 postgresql 并且有三个简单的表。
Table User
id (pk) | user_name
1 | a
2 | b
3 | c
Table Post
id (pk) | user_id (fk)
1 | 1
2 | 3
3 | 2
4 | 2
Table Block
id (pk) | blocker_id (fk) | blocked_id (fk)
1 | 1 | 2
2 | 2 | 1
Run Code Online (Sandbox Code Playgroud)
顺便说一句,正如您所看到的,我使用双向阻止,因为我不希望如果 user1 阻止 user2,则 user2 也不应该看到 user1 的帖子。
我写了一个sql:
SELECT * FROM Post p INNER JOIN Block b
ON p.user_id = b.blocker_id …Run Code Online (Sandbox Code Playgroud)