Функция и return значения, JS

Enice
На сайте с 12.08.2013
Offline
60
501

Помогите пожалуйста разобраться, а то меня что то совсем заклинило )))

Есть код, читает содержимое файла в строку. Результат в data. Куда и как прописать return чтобы использовать data вне функции.


Components.utils.import("resource://gre/modules/NetUtil.jsm");

var file = new FileUtils.File('E:\\BOT\\1.txt');
var data = '';

NetUtil.asyncFetch(file, function(inputStream, status) {

data = NetUtil.readInputStreamToString(inputStream, inputStream.available());

alert(data); // Все ок, есть результат.

});


alert(data); // Пусто!

// Как мне получить значение data вне функции
// чтобы в дальнейшем с ним работать?
F2
На сайте с 04.09.2016
Offline
5
#1

Нужно использовать data только после асинхронного получения данных. Второй алерт вызывается, когда данные еще не получены. Т.е. в том месте, где получили данные (внутри asyncFetch, где alert показыват данные) нужно вызывать свою callback функцию, которая запускает обработчик данных из data

Терашоп (https://terashop.ru)
Z0
На сайте с 03.09.2009
Offline
757
#2


function test(){
var data = 123;
return data;
}
alert (test());
F2
На сайте с 04.09.2016
Offline
5
#3
ziliboba0213:

function test(){
var data = 123;
return data;
}
alert (test());

это для случая не асинхронной загрузки, в случае ТС не сработает


Components.utils.import("resource://gre/modules/NetUtil.jsm");

var file = new FileUtils.File('E:\\BOT\\1.txt');
var data = '';

NetUtil.asyncFetch(file, function(inputStream, status) {

data = NetUtil.readInputStreamToString(inputStream, inputStream.available());

alert(data); // Все ок, есть результат.

myFunction();

});


function myFunction() {
alert(data);
};

ДП
На сайте с 23.11.2009
Offline
203
#4

Про промисы почитайте - и полезно и решает вашу задачу.

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

Enice
На сайте с 12.08.2013
Offline
60
#5

Всем спасибо за ответы!

Да, я реально протупил с асинхронностью и потратил пол ночи, в размышлениях что не так )))

В мануале даже написано "Это позволит вам прочитать файл без блокировки потока пользовательского интерфейса во время чтения."

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий