Created
August 27, 2015 11:18
-
-
Save maripiyoko/fc01d718138cb5d75f69 to your computer and use it in GitHub Desktop.
AngularJS で Promise (defer)を使ってファイルシステムからファイルを読み込む (cordova filesystem) ref: http://qiita.com/mm36/items/a9869a2066ace1aed0a8
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function slowCall() { | |
var df = $q.defer(); | |
// 非同期処理を担当する関数を定義 | |
function fn() { | |
var msg = 'now : ' + new Date().getTime(); | |
alert('inside async function.'); | |
df.resolve(msg); | |
}; | |
$timeout(fn, 1000); | |
return df.promise; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var testDeferSample = function () { | |
alert('test defer sample start.'); | |
slowCall().then(function () { | |
alert('END!'); | |
}); | |
alert('Opps.. outside'); | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var _writeFile = function(dirPath, fileName, fileText) { | |
var deferred = $q.defer(); | |
getTargetDirectory(dirPath).then(function(dirEntry) { | |
dirEntry.getFile(fileName, { create: true }, | |
function(fileEntry) { | |
fileEntry.createWriter( | |
function(writer) { | |
var cb = function() { | |
//console.log("write end"); | |
alert("保存しました。"); | |
deferred.resolve(fileName); | |
} | |
writer.onwrite = cb; | |
writer.onerror = function() { console.log("保存に失敗しました。"); } | |
//console.log( fileText ); | |
writer.write( fileText ); | |
} , | |
function() { | |
console.log("create writer error"); | |
} | |
); | |
}, | |
failFiles | |
); | |
}); | |
return deferred.promise; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var createJsonObject = function (targetDirPath, fileName) { | |
var deferred = $q.defer(); | |
readFile(targetDirPath, fileName).then(function (content) { | |
var json = { name: fileName, data: content }; | |
deferred.resolve(json); | |
}); | |
return deferred.promise; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var createCallbackFunctionList = function (targetDirPath, fileNames) { | |
var deferred = $q.defer(); | |
var functions = []; | |
fileNames.map(function (fileName) { | |
functions.push(createJsonObject(targetDirPath, fileName)); | |
}); | |
deferred.resolve(functions); | |
return deferred.promise; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var getFileAsJsonList = function () { | |
var jsonList = []; | |
var targetDirPath = 'YOUR_TARGET/DIRECTORY/HERE'; | |
var deferred = $q.defer(); | |
// まずディレクトリにあるファイル名を元に、JSONオブジェクトを取ってくる関数を作る | |
FileUtilService.listDir(targetDirPath).then(function (fileNames) { | |
createCallbackFunctionList(targetDirPath, fileNames).then(function (fns) { | |
deferred.resolve(fns); | |
}) | |
}); | |
// ファイルコンテンツ取得時に非同期処理のため、ファイルの順序がバラバラになる | |
// 全ファイルコンテンツの取得後に、ファイル名(日時)で並べ替え。 | |
deferred.promise.then(function (promises) { | |
// 全部実行したい関数の配列を取得 then の後にくる関数は、 | |
// promisesが全て実行し終わったら一番最後に実行される | |
$q.all(promises).then(function (photos) { | |
jsonList = photos.sort(function (a, b) { | |
return parseInt(b.name) - parseInt(a.name); | |
}); | |
alert('got' + jsonList.length); | |
angular.forEach(jsonList, function (value, key) { | |
console.log('FileInfo : ' + value.name + ', content length=' + value.data.length); | |
}) | |
}); | |
}); | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
test defer sample start. | |
Opps.. outside | |
inside async function. | |
END! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var testAllSample = function() { | |
alert('test sample start.'); | |
var p1 = slowCall().then(function(msg) { | |
alert('LAST 1' + msg); | |
return msg; | |
}); | |
var p2 = slowCall().then(function(msg) { | |
alert('LAST 2' + msg); | |
return msg; | |
}); | |
$q.all([p1,p2]).then(function(res) { | |
alert('LAST MOST ' + res[0] + ', ' + res[1]); | |
}); | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
test all sample start. | |
inside async function. | |
LAST 1 1440643852941 | |
inside async function. | |
LAST 2 1440643876515 | |
LAST MOST 1440643852941, 1440643876515 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var getFileSystem = function() { | |
var deferred = $q.defer(); | |
window.requestFileSystem(window.PERSISTENT, 1024*1024, function(filesystem) { | |
deferred.resolve(filesystem); | |
}); | |
return deferred.promise; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var getTargetDirectory = function(dirPath) { | |
var deferred = $q.defer(); | |
getFileSystem().then(function(filesystem) { | |
filesystem.root.getDirectory(dirPath, { create: true, exclusive: false }, | |
function(dirEntry) { | |
deferred.resolve(dirEntry); | |
}, | |
failFiles | |
); | |
}); | |
return deferred.promise; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function failFiles(error) { | |
alert('failFiles' + error.code); | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var listDir = function (dirPath) { | |
var deferred = $q.defer(); | |
getTargetDirectory(dirPath).then(function (dirEntry) { | |
var reader = dirEntry.createReader(); | |
var fileNames = []; | |
reader.readEntries( | |
function (entries) { | |
for (var i = 0; i < entries.length; i++) { | |
fileNames.push(entries[i].name); | |
} | |
deferred.resolve(fileNames); | |
}, | |
function (error) { | |
console.log("reading target directory error"); | |
} | |
); | |
}); | |
return deferred.promise; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var readFile = function(dirPath, fileName) { | |
var deferred = $q.defer(); | |
getTargetDirectory(dirPath).then(function(dirEntry) { | |
dirEntry.getFile(fileName, { create: false }, | |
function(fileEntry) { | |
fileEntry.file(function(file) { | |
var reader = new FileReader(); | |
reader.onloadend = function() { | |
deferred.resolve(this.result); | |
}; | |
reader.readAsText(file); | |
}); | |
}, | |
function(error) { | |
console.log("reading target directory error"); | |
} | |
); | |
}); | |
return deferred.promise; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment