async function getSomething() {}
let global_something
let fetching = false
const callbacks = []
function updateSomething() {
return new Promise<void>((resolve) => {
if (fetching) {
callbacks.push(() => resolve())
return
}
fetching = true
getSomething()
.then((data) => {
global_something = data
})
.finally(() => {
fetching = false
resolve()
callbacks.forEach((callback) => callback())
callbacks.length = 0
})
})
}
适用于:
- 多个地方同时请求同一个全局资源
- 需要避免并发重复请求
- 第一次请求未完成时,其它 await 都要挂起等待
- 请求完成后所有等待者都要 resolve




