https://github.com/mjc-gh/chrome-extension-promisify-apis
🤞 A quick demonstration on how to promisify Chrome Extension APIs with ease!
https://github.com/mjc-gh/chrome-extension-promisify-apis
Last synced: 6 months ago
JSON representation
🤞 A quick demonstration on how to promisify Chrome Extension APIs with ease!
- Host: GitHub
- URL: https://github.com/mjc-gh/chrome-extension-promisify-apis
- Owner: mjc-gh
- License: mit
- Created: 2016-11-17T17:01:34.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2019-03-10T03:15:08.000Z (over 6 years ago)
- Last Synced: 2025-04-02T05:54:25.426Z (6 months ago)
- Homepage:
- Size: 2.93 KB
- Stars: 12
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
First, we'll need a small function to wrap all the callback based API
methods with. This function will return a promise and will check for
Chrome runtime errors.```javascript
const asPromised = (block) => {
return new Promise((resolve, reject) => {
block((...results) => {
if (chrome.runtime.lastError) {
reject(chrome.extension.lastError);
} else {
resolve(...results);
}
});
});
};
```Now we can freely wrap any callback based API with our `asPromised`
function!```javascript
const storage = {
set(items) {
return asPromised((callback) => {
chrome.storage.local.set(items, callback);
});
},get(keys) {
return asPromised((callback) => {
chrome.storage.local.get(keys, callback);
});
},remove(keys) {
return asPromised((callback) => {
chrome.storage.local.remove(keys, callback);
});
}
};
```Now we have a promise based storage API wrapper that we can use like
such:```javascript
// This will log:
// Object {key: "value"}
storage.set({ key: 'value' }).then(() => storage.get('key')).then(console.log)// Or with await
// Object {key: "value"}
await storage.set({ key: 'value' });console.log(await storage.get('key'));
```