Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   не могу поймать ошибку в цепочке промисов (https://javascript.ru/forum/misc/66476-ne-mogu-pojjmat-oshibku-v-cepochke-promisov.html)

innowed 17.12.2016 13:14

не могу поймать ошибку в цепочке промисов
 
Здравствуйте! Я хочу цепочкой промисов обслуживать запрос.
Сначала нужно определить, пришел ли этот запрос на допустимый url, по результатам этой проверки совершать операции (обслуживать/не обслуживать). Эта проверка происходит в первом then (14 строка).
Функция, которая определяет корректность запроса, отрабатывает нормально, в случае ошибки запроса Error можно просмотреть в аргументах второго then (который на 20 строке), но при этом catch, находящийся между ними, ничего не ловит. В чём тут проблема?
//проверка на допустимость гет запроса.
function isValidRequest(requestPath) {
    let validReqs = ['/', '/index.html'];
    return !!~validReqs.indexOf(requestPath) || new Error('400');
};

function getHandler(req) {
    return new Promise((resolve, reject) => {
            return resolve(req);
    });
};

getHandler(pathname)
	.then(()=>{
		return isValidRequest(pathname); //отсюда должна вывалиться ошибка при неправильном запросе
	})
	.catch((e)=> { //не ловит
		console.log('error');
	})
	.then(function() {
		console.log(arguments); //из аргументов можно увидеть выпавшую ошибку
		return fs.ReadStream(__dirname+'/index.html')
	}).then((file) => {
		sendFile(file, res);
	});

Malleys 17.12.2016 13:24

var pathname = "/other_path";

function isValidRequest(requestPath) {
    let validReqs = ['/', '/index.html'];
    return !!~validReqs.indexOf(requestPath) || Promise.reject(new Error('400'));
};

Promise.resolve(pathname)
    .then(isValidRequest)
    .catch(e => alert("error"))
    .then(function() {
        console.log(arguments);
        //return fs.ReadStream(__dirname+'/index.html')
    })
    .then(file => {
        //sendFile(file, res);
    });


Вместо new Error('400') надо Promise.reject(new Error('400'))
иначе оно не воспринимает, что это ошибка

innowed 17.12.2016 13:44

Спасибо, понял проблему)


Часовой пояс GMT +3, время: 14:30.