Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.11.2015, 09:48
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 258

SyntaxError: Unexpected token { в return
Здравствуйте. Стоит задача: найти все файлы в директории и создать массив с датами последней модификации. Вот код:
var fs = require( 'fs' );
var path = __dirname;
var filesModified = [];

fs.readdir( path, function( err, files ){
	if( err ) console.log( err );
	return new Promise( resolve, reject ){
		for ( var i = 0; i < files.length ; i++ ){
			var file = path + '/' + files[i];
			fs.stat( file, function( err, stats ){
				filesModified.push( stats.mtime );
			} );
		}
		resolve( 'End' );
	}
} ).then( function( end ){
	console.log( filesModified );
	console.log( end );
} ).catch( function( err ){
	console.log( err );
} );

Возникает вышеописанная ошибка. Чего ему фигурные скобки не нравятся? Версия ноды 4.2.1
Ответить с цитированием
  #2 (permalink)  
Старый 08.11.2015, 10:00
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 258

Поначалу хотел сделать через mz/fs
var fs = require( 'mz/fs' );
var path = __dirname;
var filesModified = [];

fs.readdir( path, function( err, files ){
	if( err ) console.log( err );
	for ( var i = 0; i < files.length ; i++ ){
		var file = path + '/' + files[i];
		fs.stat( file, function( err, stats ){
			filesModified.push( stats.mtime );
		} );
	}
} ).then( function(){
	console.log( filesModified );
} );

но нода ругается на метод then(). Что-то в новой ноде нихера не работает
Ответить с цитированием
  #3 (permalink)  
Старый 08.11.2015, 21:21
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

Sigizmund2012,
а должно? В спецификации метод readdir разве возвращает обещание? Если нет, то и не удевительно, что Нода ругается.
Ответить с цитированием
  #4 (permalink)  
Старый 09.11.2015, 09:23
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 258

Сообщение от Safort Посмотреть сообщение
Sigizmund2012,
а должно? В спецификации метод readdir разве возвращает обещание? Если нет, то и не удевительно, что Нода ругается.
Библиотека mz/fs как раз и оборачивает методы файловой системы( и не только их ) в промисы, поэтому да, должно работать. Но не работает.
Ответить с цитированием
  #5 (permalink)  
Старый 09.11.2015, 09:37
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 258

Попробовал так сделать:
var fs = require( 'fs' );
var path = __dirname;
var filesModified = [];

fs.readdir( path, function( err, files ){
	if( err ) console.log( err );
	var promise = new Promise( resolve, reject ){
		for ( var i = 0; i < files.length ; i++ ){
			var file = path + '/' + files[i];
			fs.stat( file, function( err, stats ){
				filesModified.push( stats.mtime );
			} );
		}
		resolve( 'End' );
	}
	return promise;
} ).then( function( end ){
	console.log( filesModified );
	console.log( end );
} ).catch( function( err ){
	console.log( err );
} );

но Нода всё равно на фигурные скобки ругается. Синхронно-то всё работает, но мне на промисах сделать надо.
Ответить с цитированием
  #6 (permalink)  
Старый 09.11.2015, 10:54
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 258

Всё-таки получилось сделать. Как обычно, причина не в Ноде, а в прокладке между сиденьем и монитором
var fs = require( 'fs' );
var path = __dirname;
var filesModified = [];
var promise = new Promise( createArrayModified );
promise.then( arrayComplete ).catch( errorHandler );

function createArrayModified( resolve, reject ){

	fs.readdir( path, readFilesModified );

	function readFilesModified( err, files ) {
		var checkArrays;
		if ( err ) console.log( err );
		for ( var i = 0; i < files.length; i++ ) {
			var file = path + '/' + files[i];
			fs.stat( file, function ( err, stats ) {
				filesModified.push( stats.mtime );
			} );
		}
		checkArrays = setInterval( function(){
			if( filesModified.length === files.length ){
				resolve();
				clearInterval( checkArrays );
			}
		} ,100 );
	}
}

function arrayComplete(){
	console.log( filesModified );
}

function errorHandler( err ){
	console.log( err );
}

Последний раз редактировалось Sigizmund2012, 09.11.2015 в 14:10.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции Hol1killer Prototype & script.aculo.us 11 05.12.2016 01:37
jQuery научите пользоваться. Станислав89 Общие вопросы Javascript 10 19.12.2013 22:01
Jin: И снова о наследовании tenshi Ваши сайты и скрипты 16 19.08.2013 20:30
Помогите разобраться ŞΘLƉiΞR Общие вопросы Javascript 2 28.08.2012 11:57
регулярки: замена ссылки на ютуб Hekumok Общие вопросы Javascript 105 01.08.2012 10:48