- 在editStorageForm中初始化oss_storage_quota_value和oss_quota_unit - 删除重复的旧配额说明块,保留新的当前配额设置显示 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
export function memoizeChain(providers, treatAsExpired) {
|
|
const chain = internalCreateChain(providers);
|
|
let activeLock;
|
|
let passiveLock;
|
|
let credentials;
|
|
const provider = async (options) => {
|
|
if (options?.forceRefresh) {
|
|
return await chain(options);
|
|
}
|
|
if (credentials?.expiration) {
|
|
if (credentials?.expiration?.getTime() < Date.now()) {
|
|
credentials = undefined;
|
|
}
|
|
}
|
|
if (activeLock) {
|
|
await activeLock;
|
|
}
|
|
else if (!credentials || treatAsExpired?.(credentials)) {
|
|
if (credentials) {
|
|
if (!passiveLock) {
|
|
passiveLock = chain(options).then((c) => {
|
|
credentials = c;
|
|
passiveLock = undefined;
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
activeLock = chain(options).then((c) => {
|
|
credentials = c;
|
|
activeLock = undefined;
|
|
});
|
|
return provider(options);
|
|
}
|
|
}
|
|
return credentials;
|
|
};
|
|
return provider;
|
|
}
|
|
export const internalCreateChain = (providers) => async (awsIdentityProperties) => {
|
|
let lastProviderError;
|
|
for (const provider of providers) {
|
|
try {
|
|
return await provider(awsIdentityProperties);
|
|
}
|
|
catch (err) {
|
|
lastProviderError = err;
|
|
if (err?.tryNextLink) {
|
|
continue;
|
|
}
|
|
throw err;
|
|
}
|
|
}
|
|
throw lastProviderError;
|
|
};
|