restate / v1.0.0
வடிவமைப்பிலேயே நம்பகமானது
சேமிப்பகம் மெதுவாக இருக்கும்போது, தோல்வியடையும்போது, இல்லாதபோது restate எதை உத்தரவாதம் செய்கிறது, அது தெரிவிக்கும் பிழைகளை எப்படிப் படிப்பது.
இந்தப் பக்கத்தில்
உத்தரவாதங்கள்வரிசையான சேமிப்புகள்முயன்று பாருங்கள்ஏற்றுதல் தோல்வியடையும்போதுசேமித்து மூடுசேமிப்பகம் கிடைக்கவில்லைசேமித்த தரவைச் சரிபார்த்தல், மாற்றுதல்உங்கள் சொந்தச் சேமிப்பகம்வரம்புகள், நேர வரம்புகள்பிழைக் குறியீடுகள்உத்தரவாதங்கள்
இந்த நடத்தை 1.0 ஒப்பந்தத்தின் பகுதி; தொகுப்பின் சோதனைகள் இதை உள்ளடக்குகின்றன.
| சூழ்நிலை | restate செய்வது |
|---|---|
அடுத்தடுத்துப் பல சேமிப்புகள் | ஒவ்வொரு ஸ்டோருக்கும் வரிசையாக இயக்குகிறது; வரிசையில் உள்ள சேமிப்பு சமீபத்திய மதிப்பை எழுதுகிறது. |
ஒரு பதிவு ஏறவில்லை | autoSave-உம் மொத்தச் சேமிப்புகளும் LOAD_FAILED உடன் அதைத் தவிர்க்கின்றன; வெளிப்படையான save() மட்டுமே அதை மாற்றுகிறது. |
சேமிக்கும்போது கம்போனென்ட் அன்மவுன்ட் ஆகிறது | கோரப்பட்ட சேமிப்பு முடிகிறது; அழிக்கப்பட்ட ஸ்டோரில் பின்னர் வரும் எழுதுதல்கள் புறக்கணிக்கப்படுகின்றன. |
சேமிப்பகம் கிடைக்கவில்லை | ஸ்டோர் நினைவகத்தில் இயங்குகிறது, status().available false ஆகிறது, சேமிப்புகள் நிராகரிக்கப்படுகின்றன. |
ஒரு அடாப்டர் சிக்கிக்கொள்கிறது | operationTimeoutMs-க்குப் பிறகு செயல் நேரம் கடந்துவிடுகிறது; பின்வரும் வேலை அடாப்டர் முடியும்வரை காத்திருக்கிறது. |
மிக அதிகமான நிலுவை வேலை | புதிய செயல்கள் வரம்பின்றி வளராமல் QUEUE_FULL உடன் நிராகரிக்கப்படுகின்றன. |
வரிசையான சேமிப்புகள்
ஒரு ஸ்டோரின் செயல்கள் ஒருபோதும் ஒன்றின்மேல் ஒன்று நடப்பதில்லை. மற்றொன்று காத்திருக்கும்போது தொடங்கும் சேமிப்பு சமீபத்திய மதிப்பை எடுக்கிறது; அதனால் ஒவ்வொரு மாற்றத்திலும் சேமிப்பது வரிசையை நிரப்பாமல் கடைசி நிலையை எழுதுகிறது.
useDraft.set('A');
const first = useDraft.save(); // writes "A"
useDraft.set('B');
const second = useDraft.save(); // waits in the queue
useDraft.set('C');
const third = useDraft.save(); // joins the waiting save
await Promise.all([first, second, third]); // ['A', 'C', 'C'] — two writesமுயன்று பாருங்கள்
சேமிப்பகத்தை மெதுவாக்குங்கள், எழுதுதல்களைத் தோல்வியடையச் செய்யுங்கள், அல்லது சேமிப்பகத்தை முழுவதுமாக அகற்றுங்கள்.
எடுத்துக்காட்டு தயாராகிறது…
ஏற்றுதல் தோல்வியடையும்போது
restateManager.ready BULK_OPERATION_FAILED உடன் நிராகரிக்கப்பட்டு, தோல்வியடைந்த ஒவ்வொரு ஸ்டோரையும் பட்டியலிடுகிறது. அந்தப் பதிவு ஏறும்வரை autoSave-உம் saveAll-உம் அதை மாற்றாமல் LOAD_FAILED என்று தெரிவிக்கின்றன.
மாற்றங்களை வைத்துக்கொண்டு சேமிக்க initialize() மூலம் மீண்டும் முயலுங்கள், அவற்றைக் கைவிட restore()-ஐ அழையுங்கள், அல்லது பதிவை வேண்டுமென்றே மேலெழுத save() பயன்படுத்துங்கள்.
try {
await restateManager.ready;
} catch (error) {
// BULK_OPERATION_FAILED: one entry per store that could not load.
for (const { store, error: cause } of error.failures) {
console.error(store.key, cause.code);
}
}சேமித்து மூடு
அன்மவுன்ட்டுக்கு முன் கோரப்பட்ட சேமிப்பு இருந்தும் முடிகிறது; அதனால் "சேமித்து மூடு" கையாளி காத்திருக்க வேண்டியதில்லை.
function Document({ onClose }) {
const useDraft = useRestateScope((scope) => persistedRestate('', { scope, key: 'draft' }));
const saveAndClose = () => {
useDraft.save(); // finishes even after this component unmounts
onClose();
};
// …
}சேமித்த தரவைச் சரிபார்த்தல், மாற்றுதல்
version, migrate, validate ஆகியவை பழைய அல்லது சிதைந்த பதிவுகளிலிருந்து உங்களைக் காக்கின்றன. validate சேமிக்கும் முன்பும் மீட்டெடுப்பு அல்லது மாற்றத்துக்குப் பின்பும் இயங்குகிறது.
import { persistedRestate } from '@kkwaenggwari/restate';
const useSettings = persistedRestate(
{ theme: 'system' },
{
key: 'settings',
version: 2,
migrate(value, from, to) {
if (from === 1 && to === 2 && typeof value?.darkMode === 'boolean') {
return { theme: value.darkMode ? 'dark' : 'light' };
}
throw new Error('Unsupported stored version');
},
validate: (value) => ['system', 'light', 'dark'].includes(value?.theme),
},
);உங்கள் சொந்தச் சேமிப்பகம்
getItem, setItem, removeItem கொண்ட எந்த ஆப்ஜெக்டும் பொருந்தும். மெத்தட்கள் மதிப்புகளையோ Promise-களையோ தரலாம்; isAvailable விருப்பமானது.
import { persistedRestate } from '@kkwaenggwari/restate';
const sessionStorageAdapter = {
isAvailable: () => typeof sessionStorage !== 'undefined',
getItem: (key) => sessionStorage.getItem(key),
setItem: (key, value) => sessionStorage.setItem(key, value),
removeItem: (key) => sessionStorage.removeItem(key),
};
export const useFilters = persistedRestate(
{ query: '' },
{
key: 'filters',
storage: sessionStorageAdapter,
},
);வரம்புகள், நேர வரம்புகள்
ஒரு செயல் எவ்வளவு நேரம் எடுக்கலாம், எத்தனை காத்திருக்கலாம், ஒரு மதிப்பு எவ்வளவு பெரியதாக இருக்கலாம் என்று அமையுங்கள்.
persistedRestate(value, {
key: 'draft',
operationTimeoutMs: 10_000, // default 30000
maxPendingOperations: 64, // default 256
maxStorageCharacters: 1_000_000,
});பிழைக் குறியீடுகள்
restate உருவாக்கும் பிழைகளுக்கு name RestateError, code, சேமிக்கப்பட்ட ஸ்டோர்களுக்கு key உண்டு. சேமிப்பக அடாப்டர்களும் உங்கள் callback-களும் தங்கள் சொந்தப் பிழைகளுடன் நிராகரிக்கலாம்.
| குறியீடு | பொருள் |
|---|---|
BULK_OPERATION_FAILED | restateManager.ready அல்லது saveAll போன்ற மொத்த அழைப்பில் தோல்விகள் இருந்தன; error.failures-ஐப் பாருங்கள். |
INDEXEDDB_ABORTED | ஒரு IndexedDB பரிவர்த்தனை கைவிடப்பட்டது. |
INDEXEDDB_BLOCKED | தரவுத்தளத்தைத் திறப்பதை வேறு தாவலில் உள்ள இணைப்பு தடுத்தது. |
INDEXEDDB_CONNECTION_CLOSING | கோரிக்கை தொடங்கியபோது தரவுத்தள இணைப்பு மூடிக்கொண்டிருந்தது. |
INDEXEDDB_OPEN_FAILED | தரவுத்தளத்தைத் திறக்க முடியவில்லை. |
INDEXEDDB_REQUEST_FAILED | ஒரு IndexedDB கோரிக்கை தோல்வியடைந்தது. |
INDEXEDDB_STORE_MISSING | ஏற்கெனவே உள்ள தரவுத்தளத்தில் object store இல்லை. |
INVALID_STORAGE_RECORD | சேமித்த பதிவு செல்லுபடியான restate பதிவு அல்ல. |
INVALID_STORED_VALUE | மதிப்பு validate-ஐக் கடக்கவில்லை. |
LIFECYCLE_LIMIT | ஒரு updater மீண்டும் மீண்டும் தொடங்கி நின்றது. |
LOAD_FAILED | பதிவை ஏற்ற முடியவில்லை; அதனால் தானியங்கி அல்லது மொத்தச் சேமிப்பு அதை மாற்றவில்லை. |
MMKV_UNAVAILABLE | react-native-mmkv-ஐ ஏற்ற முடியவில்லை. |
MULTIPLE_ERRORS | ஒரே செயலில் பல callback-கள் தோல்வியடைந்தன; error.errors-ஐப் பாருங்கள். |
NOTIFICATION_LIMIT | கண்காணிப்பாளர்கள் ஒரு சுழற்சியில் தொடர்ந்து மாற்றங்களைத் திட்டமிட்டனர். |
OBSERVER_ERROR | ஒரு listener அல்லது lifecycle callback பிழையை எறிந்தது. |
OPERATION_ABORTED | ஒரு சேமிப்பகச் செயல் ரத்து செய்யப்பட்டது. |
QUEUE_FULL | maxPendingOperations அனுமதிப்பதை விட அதிகமான செயல்கள் காத்திருந்தன. |
REENTRANT_SETTER | ஒரு ஸ்டேட் updater இயங்கும்போதே அதே ஸ்டோரை மாற்ற முயன்றது. |
SCOPE_DESTROYED | ஸ்டோர்களை உருவாக்க அழிக்கப்பட்ட scope பயன்படுத்தப்பட்டது. |
SEQUENCE_EXHAUSTED | ஒரு உள் வரிசைக்கு அடையாளங்காட்டிகள் தீர்ந்துவிட்டன. |
STORAGE_BLOCKED | நேர வரம்பு அல்லது ரத்துக்குப் பிறகும் முந்தைய அடாப்டர் அழைப்பு முடியவில்லை. |
STORAGE_TIMEOUT | ஒரு செயல் operationTimeoutMs-ஐ விட அதிக நேரம் எடுத்தது. |
STORAGE_UNAVAILABLE | இங்கே சேமிப்பகத்தைப் பயன்படுத்த முடியாது; ஸ்டோர் நினைவகத்தில் தொடர்ந்து இயங்குகிறது. |
STORAGE_VALUE_TOO_LARGE | குறியாக்கப்பட்ட மதிப்பு maxStorageCharacters-ஐ மீறுகிறது. |
STORAGE_VERSION_MISMATCH | பதிவின் பதிப்பு வேறுபட்டது; எந்த migrate ஃபங்ஷனும் அதைக் கையாளவில்லை. |
STORE_DESTROYED | அழிக்கப்பட்ட ஸ்டோருக்குச் சந்தா செய்யப்பட்டது அல்லது சேமிப்பகத்தைப் பயன்படுத்தக் கேட்கப்பட்டது. |