@@ -5,7 +5,9 @@ import type { CommentData, Member } from '../../types'
55import { formatTimestamp } from '../../utils'
66import { openTagsSetter } from './content'
77
8- export const memberDataCache = new Map < Member [ 'username' ] , Member > ( )
8+ const banned = Symbol ( )
9+
10+ export const memberDataCache = new Map < Member [ 'username' ] , Member | typeof banned > ( )
911
1012interface ProcessAvatar {
1113 /** 触发弹出框的元素。 */
@@ -84,16 +86,21 @@ export function processAvatar(params: ProcessAvatar) {
8486
8587 memberDataCache . set ( memberName , memberData )
8688 } catch ( err ) {
87- if ( err && typeof err === 'object' && 'name' in err && err . name !== 'AbortError' ) {
88- $content . html ( `<span>获取用户信息失败</span>` )
89+ if ( err instanceof Error ) {
90+ $content . html ( `<span>${ err . message } </span>` )
91+
92+ if ( err . cause === 404 ) {
93+ memberDataCache . set ( memberName , banned )
94+ }
8995 }
96+
9097 return null
9198 }
9299 }
93100
94101 const data = memberDataCache . get ( memberName )
95102
96- if ( data ) {
103+ if ( typeof data === 'object' ) {
97104 $content . find ( '.v2p-no' ) . removeClass ( 'v2p-loading' ) . text ( `V2EX 第 ${ data . id } 号会员` )
98105
99106 $content
@@ -104,6 +111,8 @@ export function processAvatar(params: ProcessAvatar) {
104111 if ( data . bio && data . bio . trim ( ) . length > 0 ) {
105112 $content . find ( '.v2p-bio' ) . css ( 'disply' , 'block' ) . text ( data . bio )
106113 }
114+ } else if ( typeof data === 'symbol' && data === banned ) {
115+ $content . html ( '<span>查无此用户,疑似已被封禁</span>' )
107116 }
108117 } ) ( )
109118 }
0 commit comments