2017-01-16 3 views
0

Я использую файл cordova-plugin для записи текстового файла. Я могу получить плагин для заполнения <div> по модальному всплывающему окну. Этот фрагмент кода работает отлично:Как читать файл в переменную с помощью cordova-plugin-файла

function readFile6(fileName){ 
     var str = ''; 
     window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function(dir){ 
     dir.getFile(fileName, {create: false}, function(fileEntry){ 

      fileEntry.file(function(file){ 
       var reader = new FileReader(); 
       reader.onloadend = function (evt) { 
        $(".accordine").html(evt.target.result); 
       }; 
       reader.readAsText(file); 

      }, function(error){ 
       alert("Error: " + error.code); 
      }); 
     }, function(error){ 
      alert("Error: " + error.code); 
     }); 
}, function(){ 
    alert("Error"); 
}); 

Проблема, мне нужно содержание файла, который будет возвращен в вызывающую функцию, поэтому я могу манипулировать данные, прежде чем он будет отображаться.

Я читаю каждый учебник/образец, который я могу найти, но ни один из примеров не показывает, как что-либо сделать с содержимым, за исключением заполнения div или показать в console.log().

Как получить содержимое текстового файла в качестве возвращаемого значения?

+1

Возможный дубликат [? Как вернуть ответ от асинхронного вызова] (http://stackoverflow.com/questions/14220321/how-do-i- return-the-response-from-a-асинхронный вызов) –

+0

Это не AJAX. Данные, которые мне нужны, находятся прямо там, в evt.target.result Я просто хочу отправить его обратно вызывающей функции. –

+0

Да. Прямо там, в 'evt.target.result', передается функции асинхронного обработчика после возврата вашей основной функции. Проблема (поясняется в связанном вопросе) не имеет ничего общего с *, где * обрабатывается ваш результат, все, что связано с *, когда *. AJAX - это не единственное место, где это возникает в программировании JS, особенно в Кордове, которая агрессивно асинхронна. –

ответ

0

«Проблема в том, что мне нужно содержимое файла, которое будет возвращено вызывающей функции, чтобы я мог манипулировать данными до его отображения». Нет, нет. Вы можете манипулировать данными, не получая их как возвращаемое значение. Предположим, что у вас есть функция processData, которую вы хотите применить к данным. Тогда просто изменить reader.onloadend = часть к этому:

reader.onloadend = function (evt) { 
    $(".accordine").html(processData(evt.target.result)); 
}; 
+0

Но Дэвид, мне нужны данные, потому что мне нужно вставить некоторые новые данные в верхнюю часть файла и, возможно, удалить старые данные снизу, а затем сохранить данные, чтобы они были доступны, если устройство не подключено. Новые данные уже находятся в вызывающей функции. –

+0

У вас есть данные, а не как возвращаемое значение. Независимо от того, что вы хотите делать с данными, сделайте это внутри анонимной функции. Это единственная часть, которая выполняется после того, как данные были извлечены с диска, и, следовательно, единственная часть, в которой у вас есть доступ к переменной, содержащей результат чтения диска. –

 Смежные вопросы

  • Нет связанных вопросов^_^