如何在onError回调中使用异步错误处理程序



我正在创建一个链接,从服务器中删除401响应上的用户身份验证令牌。这里的问题是,在我的例子AsyncStorage中,我需要从存储中删除tokesn,顾名思义,它执行异步操作,但如果我试图从@apollo/client/link/erroronError回调传递异步函数,代码编辑器会立即抛出以下错误:Type 'Promise<void>' is not assignable to type 'void | Observable<FetchResult<{ [key: string]: any; },

所以有一种方法可以将异步回调传递给onError

使令牌链接无效

import {ErrorResponse, onError} from '@apollo/client/link/error';
import {isJwtError, JWTError} from './errors';
// async function to remove auth token from asyncstorage
import {removeTokens} from './utils';
interface ResponseError extends ErrorResponse {
networkError?: Error & {
statusCode?: number;
bodyText?: string;
};
}
export const invalidateTokenLink = onError((error: ResponseError) => {
if (
(error.networkError && error.networkError.statusCode === 401) ||
error.graphQLErrors?.some(isJwtError)
) {
if (error.graphQLErrors[0].extensions.code !== JWTError.expired) {
// this is where I run an asynchronous function to remove the token
removeTokens();
}
}
});

错误消息提到您可以返回Observable<FetchResult<{ [key: string]: any; }。apollo客户端似乎使用了zen observable库。

你可以从你的承诺中建立一个可观察的。或者使用可观察助手中的promiseToObservable函数。

最新更新