JSFiddle - React, Tailwind, and code Playground
by ghostoy
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/q.js/1.0.0/q.min.js"></script>
<button onclick="run(writeFile)">writeFile</button>
<button onclick="run(testPromise)">testPromise</button>
JavaScript
function requestFS(cb, err) {
navigator.webkitTemporaryStorage.requestQuota(10*1024*1024, function(grantedBytes) {
webkitRequestFileSystem(TEMPORARY, grantedBytes, function(fs) {
cb(fs);
});
}, err);
}
function run(generator) {
var onError = function(e) { throw e; };
var g = generator(function w(func, obj) {
if (Object.prototype.toString.call(func) === '[object Function]') {
return function() {
var args = [].slice.call(arguments);
args.push(function() {
g.next.apply(g, arguments);
});
args.push(onError);
return func.apply(obj, args);
};
} else { // promise
func.then(function() {
g.next.apply(g, arguments);
}, onError);
}
});
g.next();
}
function *writeFile(w) {
var fs = yield w(requestFS)();
var fileEntry = yield w(fs.root.getFile, fs.root)('log.txt', {create: true});
var fileWriter = yield w(fileEntry.createWriter, fileEntry)();
fileWriter.onwriteend = function(e) {
console.log('Write completed.');
};
fileWriter.onerror = function(e) {
console.log('Write failed: ' + e.toString());
};
// Create a new Blob and write it to log.txt.
var blob = new Blob(['Lorem Ipsum'], {type: 'text/plain'});
fileWriter.write(blob);
}
function async() {
var defer = Q.defer();
setTimeout(function() {
defer.resolve('asdf');
}, 1000);
return defer.promise;
}
function *testPromise(w) {
var x = yield w(async());
console.log(x);
}