Skip to content

Instantly share code, notes, and snippets.

@RReverser
Last active March 12, 2016 21:14
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RReverser/2850abc148574898667d to your computer and use it in GitHub Desktop.
Save RReverser/2850abc148574898667d to your computer and use it in GitHub Desktop.
Async APIs for accessing files from different sources
// Chrome extensions/apps API
// Uses Callback #3: (data => { let err = chrome.runtime.lastError; ... }) for Chrome API
// Uses Callback #2: (data => { ... }, err => { ... }) for FileSystem API (also Chrome-specific!)
// Uses Events onload and onerror for File API (HTML5)
// All implemented within one vendor for different APIs (sic!)
chrome.fileSystem.chooseEntry({ type: 'openFile' }, fileEntry => {
if (chrome.runtime.lastError) {
console.error('Error in file open dialog:', chrome.runtime.lastError);
} else {
fileEntry.file(file => {
let reader = new FileReader();
reader.onload = () => console.log(reader.result);
reader.onerror = () => console.error('Error during file reading:', reader.error);
reader.readAsText(file);
}, error => console.error('Error while retrieving a File instance:', error));
}
});
// HTML5 File API
// Events: onload + onerror
document.getElementById('fileInput').addEventListener('change', event => {
let file = event.target.files[0];
let reader = new FileReader();
reader.onload = () => console.log(reader.result);
reader.onerror = () => console.error(reader.error);
reader.readAsText(file);
});
// Node.js
// Callbacks #1: ((err, data) => { ... })
const { readFile } = require('fs');
fs.readFile('file.txt', 'utf-8', (err, contents) => {
if (err) {
console.error(err);
} else {
console.log(contents);
}
});
// HTML5 requestFileSystem proposal (turned out to be Chrome-only, but widely used)
// Callback #2: (data => { ... }, err => { ... }) + Events onload and onerror for File API
requestFileSystem(PERSISTENT, 1024, fileSystem => {
fileSystem.root.getFile('file.txt', fileEntry => {
fileEntry.file(file => {
let reader = new FileReader();
reader.onload = () => console.log(reader.result);
reader.onerror = () => console.error(reader.error);
reader.readAsText(file);
}, error => console.error(error));
}, error => console.error(error));
}, error => console.error(error));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment