Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.12.2016, 13:14
Аспирант
Отправить личное сообщение для innowed Посмотреть профиль Найти все сообщения от innowed
 
Регистрация: 27.03.2015
Сообщений: 78

не могу поймать ошибку в цепочке промисов
Здравствуйте! Я хочу цепочкой промисов обслуживать запрос.
Сначала нужно определить, пришел ли этот запрос на допустимый 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);
	});

Последний раз редактировалось innowed, 17.12.2016 в 13:21.
Ответить с цитированием
  #2 (permalink)  
Старый 17.12.2016, 13:24
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

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'))
иначе оно не воспринимает, что это ошибка

Последний раз редактировалось Malleys, 17.12.2016 в 13:38. Причина: [js run]; алерт вместо console.log; закомментировал не браузерные функций иначе в браузере не тестится;
Ответить с цитированием
  #3 (permalink)  
Старый 17.12.2016, 13:44
Аспирант
Отправить личное сообщение для innowed Посмотреть профиль Найти все сообщения от innowed
 
Регистрация: 27.03.2015
Сообщений: 78

Спасибо, понял проблему)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибку. помогите плиз uuusseerr Серверные языки и технологии 1 26.10.2016 10:44
Не могу решить ошибку в Angular!? maxprof Angular.js 4 27.07.2015 16:24
Как поймать определенную ошибку? Shitbox2 Общие вопросы Javascript 3 13.03.2014 22:55
[FF+GM] Проверьте пжл. скрипт(не могу найти ошибку) Benos Firefox/Mozilla 4 30.03.2013 17:46
Не могу исправить ошибку. Подскажите Saene Общие вопросы Javascript 6 16.02.2013 18:36