2015-04-26 4 views
-1

Im работает над скриптом node.js и им не удается вызвать переменную вне функции. File.name отлично работает внутри функции engine.on ready, но не будет функционировать в режиме бездействия.Невозможно вызвать переменную вне функции?

engine.on('ready', function() { 
    engine.files.forEach(function (file) { 
    io.emit('chat message', "downloading " + file.name); 
    file.select() 
    }) 

    engine.on('idle', function() { 
    io.emit('chat message',"files '" + file.name + "' downloaded"); 
    }); 
}); 

Как я могу сделать file.name глобальной переменной, которая может использоваться во всех функциях?

+2

просто использовать: 'вар что-то = file.name' –

ответ

0

В функции ready вы имеете итерации над каждым файлом в то время как в idle вы пытаетесь получить доступ только один файл, это, кажется, причиной ошибки для меня. Я думаю, что правильный доступ не только к одному, но и ко всем файлам. Это должно выглядеть примерно так:

engine.on('ready', function() { 
    engine.files.forEach(function (file) { 
    io.emit('chat message', "downloading " + file.name); 
    file.select() 
    } 
}); 

engine.on('idle', function() { 
    engine.files.forEach(function (file) { 
    io.emit('chat message', "files '" + file.name + "' downloaded); 
    } 
}); 
0

Просто используйте:

global['fileName'] = file.name; 

или установить весь файл globaly:

global['file'] = file; 
-1

Ваша engine.on('idle', function() { функция не имеет доступа к file объекта как file объект существует только внутри вашего forEach петля. Вам нужно будет посмотреть, какие аргументы передаются engine.on('idle'), чтобы узнать, какие параметры доступны.

+0

Позор это вниз проголосовали, если это действительно правильно – alexreardon

0

Файл переменной определяется внутри функции, вызываемой в цикле forEach, и относится к отдельному файлу. Я думаю, что то, что вы хотите сделать, - это цикл файлов, которые были загружены, когда двигатель переходит в режим ожидания. Вы также можете добавить некоторый маркер или сохранить индекс, файлы которого уже были напечатаны, и распечатывать только файлы, загруженные с самого последнего простоя. Но вот пример, где вы можете выводить все файлы, которые были загружены, когда двигатель переходит в режим ожидания.

engine.on('ready', function() { 
 
    engine.files.forEach(function (file) { 
 
     io.emit('chat message', "downloading " + file.name); 
 

 
     file.select(); 
 
    }); 
 
    engine.on('idle', function() { 
 
     engine.files.forEach(function (file) { 
 
      io.emit('chat message', "files '" + file.name + "' downloaded"); 
 
     }); 
 
    }); 
 
});

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