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