-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Реализация
Тесты:
- Сценарий 1: состояние обновляется раньше, чем его запрашивают (проверить сброс)
- Сценарий 2: запрос идет раньше, чем обновилось состояние (проверить сброс)
- Сценарий 3: состояние обновляется во второй и последующие разы, а потом его запрашивают
Реализация:
// @ts-check
/** @template T */
function createState() {
let currentState = /** @type {T | undefined} */ (undefined)
let callback = /** @type {((result: T) => void) | undefined} */ (undefined)
return {
/** @returns {Promise<T>} */
get() {
return new Promise(resolve => {
if (!currentState) {
callback = resolve
return
}
resolve(currentState)
currentState = undefined
})
},
update(/** @type {T} */ newState) {
if (!callback) {
currentState = newState
return
}
callback(newState)
callback = undefined
},
}
}Metadata
Metadata
Assignees
Labels
No labels