مسدود شده (اختیاری): اگر پایگاه داده از قبل وجود داشته باشد و اتصالات باز وجود داشته باشد که در پاسخ به یک رویداد نسخه ای بسته نمی شوند ، درخواست تا بسته شدن آنها مسدود می شود. - فعلی: نسخه پایگاه داده ای که مانع عملکرد حذف می شود.
- رویداد: شیء رویداد برای رویداد "نسخه" مرتبط.
یک شیء indexedDB پیشرفته را می گیرد و یک ساده اصلاح نشده را برمی گرداند.
این مفید است اگر به دلایلی می خواهید به Plain IndexedDB برگردید. وعده ها همچنین به اشیاء Idbrequest تبدیل می شوند.
یک شیء IDB را می گیرد و نسخه ای را که توسط این کتابخانه تقویت شده است ، برمی گرداند.
این مفید است اگر برخی از کد های شخص ثالث به شما یک شیء IDBDatabase بدهد و می خواهید ویژگی های این کتابخانه را داشته باشد.
این به دلیل ابتدایی از دست رفته ، با Idbcursor کار نمی کند. همچنین ، اگر یک idbtransaction را بپیچید ، tx. store و tx. objectstorenames در لبه کار نمی کنند. برای جلوگیری از این مسائل ، شیء IDBDatabase را بپیچید و از شیء بسته بندی شده برای ایجاد معامله جدید استفاده کنید.
پس از باز کردن بانک اطلاعاتی ، API همانند IndexedDB است ، به جز چند تغییر برای آسانتر کردن کارها.
در مرحله اول ، هر روشی که معمولاً یک شیء idbrequest را برمی گرداند ، اکنون وعده ای را برای نتیجه باز می گرداند.
این کتابخانه تمام اشیاء Idbrequest را به وعده ها تبدیل می کند ، اما از قبل نمی داند کدام روش ها ممکن است وعده ها را برگردانند.
در نتیجه ، روش هایی مانند Store. put ممکن است به جای بازگشت یک وعده ، پرتاب کنند.
اگر از توابع ASYNC استفاده می کنید ، هیچ تفاوت قابل مشاهده ای وجود ندارد.
tl ؛ dr: منتظر چیزهای دیگر بین شروع و پایان معامله خود نیستید ، در غیر این صورت معامله قبل از انجام کار بسته می شود.
در صورت عدم پردازش ریزگردها ، یک معامله IDB به طور خودکار بسته می شود. در نتیجه ، این خوب کار می کند:
اما این چنین نیست:
در این حالت ، معامله بسته می شود در حالی که مرورگر در حال واگذاری است ، بنابراین Store. put شکست می خورد.
میانبرهایی برای دریافت/تنظیم از یک فروشگاه شیء
ایجاد یک معامله برای یک عمل واحد معمول است ، بنابراین روش های یاور برای این کار گنجانده شده است:
میانبرها عبارتند از: Get ، GetKey ، GetAll ، GetAllKeys ، Count ، Put ، Add ، Delete و Clear. هر روش یک آرگومان StoreName را می گیرد ، نام فروشگاه شیء و بقیه آرگومان ها همان روش IDBoBjectStore معادل هستند.
میانبرها برای دریافت از یک فهرست
میانبرها عبارتند از: getFromIndex ، getKeyFromIndex ، getAllFromIndex ، getAllKeysFromIndex و countfromindex.
هر روش آرگومان های storename و indexname را انجام می دهد ، و به دنبال آن بقیه آرگومان ها از روش معادل IDBindex.
اگر معامله شامل یک فروشگاه واحد باشد ، ملک فروشگاه به آن فروشگاه مراجعه می کند.
اگر معامله ای شامل چندین فروشگاه باشد ، tx. store تعریف نشده است ، برای دریافت فروشگاه ها باید از tx. objectstore (storename) استفاده کنید.
معاملات دارای یک وعده . done است که با انجام موفقیت آمیز معامله حل می شود و در غیر این صورت با خطای معامله رد می شود.
اگر به پایگاه داده می نویسید ، tx. done این سیگنال است که همه چیز با موفقیت به پایگاه داده متعهد شده است. با این حال ، در انتظار عملیات فردی هنوز هم مفید است ، زیرا خطایی را مشاهده می کنید که باعث شکست معامله شده است.
روشهای پیش رو (پیشروی ، ادامه ، ادامه کار) وعده ای را برای مکان نما ، یا در صورت عدم ارائه مقادیر دیگر برای ارائه ، بازگردانید.
پشتیبانی async iterator به طور پیش فرض گنجانده نشده است (Edge از آنها پشتیبانی نمی کند). برای درج آنها ، واردات IDB/با async-ittr به جای IDB (این اندازه کتابخانه را به آن افزایش می دهد~1. 29kb Brotli'd):
یا https://cdn. jsdelivr.net/npm/idb@7/build/umd-with-async-ittr. js اگر از نسخه غیر مودول استفاده می کنید.
اکنون می توانید بیش از فروشگاه ها ، فهرست ها و مکان نما ها تکرار کنید:
هر شیء بازده یک idbcursor است. شما می توانید به صورت اختیاری از روش های پیشرفته برای پرش از موارد استفاده کنید (در یک تکرار Async که آنها باطل هستند):
اگر به صورت دستی مکان نما را پیش نبرید ، cursor. continue () برای شما فراخوانی می شود.
فروشگاه ها و شاخص ها همچنین دارای یک روش تکرار شونده هستند که دارای امضای مشابه OpenCursor هستند ، اما یک تکرار کننده Async را برمی گرداند:
این بسیار شبیه به LocalStorage است ، اما Async. اگر این تنها چیزی است که شما نیاز دارید ، ممکن است به idb-keyval علاقه داشته باشید. همیشه می توانید بعداً به این کتابخانه ارتقا دهید.
این کتابخانه کاملاً تایپ شده است ، و شما می توانید با ارائه انواع پایگاه داده خود ، موارد را بهبود بخشید:
برای تعریف انواع پایگاه داده خود ، DBSchema را با رابط کاربری که کلیدها نام فروشگاه های شیء شما هستند ، گسترش دهید.
برای هر مقدار ، یک شیء را فراهم کنید که مقدار آن نوع مقادیر موجود در فروشگاه باشد و کلید نوع کلیدهای موجود در فروشگاه است.
به صورت اختیاری ، ایندکس ها می توانند شامل نقشه ای از نام های فهرست باشند ، به نوع کلید موجود در آن فهرست.
هنگام تماس با OPENDB ، این رابط را ارائه دهید و از آن پس پایگاه داده شما به شدت تایپ می شود. این همچنین به IDE شما اجازه می دهد تا نام فروشگاه ها و فهرست ها را به صورت خودکار به صورت خودکار انجام دهد.
انتخاب از انواع
اگر بدون ارائه انواع با OpenDB تماس بگیرید ، پایگاه داده شما از انواع اساسی استفاده می کند. با این حال ، گاهی اوقات شما باید با فروشگاه هایی که در طرح شما نیستند ، تعامل داشته باشید. در این صورت می توانید بازیگران کنید.
بیایید بگوییم که ما در حال تغییر نام فروشگاه "Number-Number" به "nums fave" بودیم:
همچنین می توانید با حذف نوع ، به عنوان مثال DB به عنوان idbpdatabase ، به یک پایگاه داده بی علامت ریخته شوید.
توجه: انواع مانند idbpdatabase فقط توسط TypeScript استفاده می شود. این اجرای از پروکسی های زیر هود استفاده می کند.
این همچنین تست نوع را انجام می دهد.
برای آزمایش ، حرکت به ساخت/ تست/ در یک مرورگر. برای این کار باید یک سرور وب اساسی تنظیم کنید.