С Новым годом! Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259

цепочка промисов

24.03.2019, 17:32. Показов 2413. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть код(да, он для Ноды, но это не важно, вопрос про промисы)))
работает отлично, ожидаемо.
Но, когда я указываю неправильный путь к файлу 1.txt, в консоль выводится:
а) ошибка
б) содержимое только третьего файла
вызов функции чтения второго файла игнорируется, как и последующий catch
Если же ошибку сделать только к пути ко второму файлу,то:
а) выводит содержимое первого файла
б) ошибку на путь к 2-му файлу
в) содержимое 3-го файла
Собственно вопрос: почему в первом случае следующий файл после ошибки игнорируется, а во втором выводится как ни в чем не бывало?

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const fs = require('fs');
 
const myReadFile = (fileName, encoding) => 
    new Promise((resolve, reject) => {
        fs.readFile(fileName, encoding, (err, data) => {
            if(err)
                reject(err);
            else
                resolve(data.toString());
        });
    });
 
myReadFile('1.txt', 'utf-8')
    .then(data => {
        console.log(data);
        return myReadFile('24.txt', 'utf8');
    })
    .catch(err => console.log(err))
    .then(data => {
        console.log(data);
        return myReadFile('3.txt', 'utf8');
    })
    .catch(err => console.log(err))
    .then(data => {
        console.log(data);
    })
    .catch(err => console.log(err));
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.03.2019, 17:32
Ответы с готовыми решениями:

цепочка промисов создание с последующим выполеннием
Уважаемые, подскажите у меня есть массив данных, каждое в отдельности надо обработать через промис как это сделать? Мне бы хотелось с...

Цепочка
Предлагаю игру: участник топика отвечает на вопрос предыдущего участника, затем придумывает свой вопрос (можно ситуацию). Далее по...

Навигационная цепочка
Подскажите код навигационной цепочки. Спасибо.

9
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
24.03.2019, 17:51
Цитата Сообщение от klopp Посмотреть сообщение
как и последующий catch
klopp, а так?
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const fs = require('fs');
 
const myReadFile = (fileName, encoding) => 
    new Promise((resolve, reject) => {
        fs.readFile(fileName, encoding, (err, data) => {
            if(err)
                reject(err);
            else
                resolve(data.toString());
        });
    });
 
myReadFile('1.txt', 'utf-8')
    .then(data => {
        console.log(data);
        return myReadFile('24.txt', 'utf8');
    })
    .catch(err => console.log('CATCH', err))
    .then(data => {
        console.log(data);
        return myReadFile('3.txt', 'utf8');
    })
    .catch(err => console.log('CATCH', err))
    .then(data => {
        console.log(data);
    })
    .catch(err => console.log(err));
0
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
24.03.2019, 18:01  [ТС]
Цитата Сообщение от shvyrevvg Посмотреть сообщение
а так?
без изменений
Работает ожидаемо если и в catch помещать вызов функции myReadFile
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
24.03.2019, 18:02
klopp, а можно вывод первого и второго случая увидеть?
0
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
24.03.2019, 18:10  [ТС]
shvyrevvg,
111111111
2222222 2222
3333333333 333333333
это содержимое соответствующих файлов
Миниатюры
цепочка промисов  
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
24.03.2019, 18:13
klopp, так попадает же в первый catch и в первом, и во втором случае.
0
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
24.03.2019, 18:21  [ТС]
shvyrevvg, я имел ввиду что в первом случае в отчет не попадает ни вызов myReadFile('2.txt', 'utf8') ни catch от него
а во втором случае myReadFile('3.txt', 'utf8') вызывается
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
24.03.2019, 18:26
Лучший ответ Сообщение было отмечено klopp как решение

Решение

klopp, 1 случай - чтение первого файла c ошибкой, then не выполняется, соответсвенно и чтения второго файла не будет, ошибка ловится в первый catch. Выполняется чтение третьего файла.
2 случай - чтение первого файла без ошибок, then выполняется, чтение второго файла с ошибкой, ошибка ловится в первый catch. Выполняется чтение третьего файла.

Добавлено через 2 минуты
JavaScript
1
2
3
4
5
6
7
myReadFile('1.txt', 'utf-8')
    .catch(err => console.log(err)) // добавить 
    .then(data => {
        console.log(data);
        return myReadFile('24.txt', 'utf8');
    })
    // ...
1
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
24.03.2019, 18:37  [ТС]
shvyrevvg, а почему в обоих случаях ошибка ловится в первый catch ?
первый catch для первого файла, а для второго файла второй catch, ведь если первый файл прочитан без ошибок, то вызывается первый then, а первый catch игнорируется

Добавлено через 7 минут
shvyrevvg, да, вот если добавить catch как вы посоветовали, то всё работает ожидаемо хорошо
0
249 / 162 / 68
Регистрация: 10.12.2017
Сообщений: 558
27.03.2019, 15:43
тут можно посмотреть другой варик
https://hackernoon.com/functio... ac18c4431e
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.03.2019, 15:43
Помогаю со студенческими работами здесь

Цепочка CSS
Нужно сверстать такую цепочку, помогите пожалуйста!

Цепочка слов
Задача: Цепочка слов. Вход – файл на диске in4.dat. состоящий из слов. Разделенных пробелами два последних слова символьное изображение...

Цепочка из скриптов
Есть три скрипта на php. Запрос идёт от 1 к 2, зате к 3 и обратно по цепочке возвращается к 1. Подскажите как это реализовать? Можно ли...

Навигационная цепочка
Доброго времени суток! На сайте существует меню, в котором есть пункты и подпункты (скрин «Меню»). К примеру, если зайти в пункт меню и...

Длиннейшая цепочка
Нашел задачу на олимпе: Есть идея сделать с помощью рекурсии, но слишком долго. Потом решился через графы но не могу довести до...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru