var imageURL = jQuery.Deferred();
据え置きオブジェクトとしてグローバル変数があります。
次に、ループを実行する関数があります。ループごとに、非同期関数を介して生成される値を取得する予定です。私が抱えていた問題は、関数が値を返す前に呼び出されていたため、値を正しく取得できなかったため、jQuerydeferredを使用するように指示されました。私の頭を完全に理解することはできません:
downloadProductImage: function(remoteImage, localImageName){
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
fileSystem.root.getFile(localImageName, {create: true, exclusive: false}, function ff1(fileEntry) {
var localPath = fileEntry.fullPath;
var ft = new FileTransfer();
ft.download(remoteImage,
localPath, function (entry) {
imageURL.resolve(entry.fullPath);
//return entry.fullPath;
}, fail);
}, fail);
}, fail);
}
downloadProductImage関数はループで実行され、この関数が呼び出された直後に、imageURL.resolve(entry.fullPath)の値を取得したいので、次のようにしました。
//start loop
imageURL.done(function(theURL){
alert(theURL);
});
//end loop
これを正しく理解していれば、ファイルのダウンロードからのコールバックが実行され、完了するとimageURL.done()が実行されます。ただし、done()は、それぞれを上書きしているかのように、同じファイルパスを表示し続けます。
どんな助けでもいただければ幸いです。