Я согласен с ответом, предложенным в настоящее время fedorqui в контексте заданного в настоящее время вопроса. Ниже дается только предоставление более общих ответов.
Еще один общий подход (для bash 4.0 или newer) заключается в том, чтобы сохранить ваши пары в ассоциативном массиве:
declare -A pairs=( [4_1]=4_2 [5_1]=5_2 [6_1]=6_2 [7_1]=7_2 [8_1]=8_2 )
for i in "${!pairs[@]}"; do
j=${pairs[$i]}
paste "$i.txt" "$j.txt" >"${i}.${j}.txt"
done
Другой (совместимый со старыми версиями bash) заключается в использовании более одного обычного массива:
is=( 4_1 5_1 6_1 7_1 8_1 )
js=( 4_2 5_2 6_2 7_2 8_2 )
for idx in "${!is[@]}"; do
i=${is[$idx]}
j=${js[$idx]}
paste "$i.txt" "$j.txt" >"$i.$j.txt"
done
.catch
ловит любые предыдущие части цепочки обещаний и оставляет после .then
s без функции отклонения после .catch
uncatched (если нет другого .catch
). Это означает, что ваша цепочка не работает, вероятно, в одном из .then
, когда .catch
находится в конце цепи и, вероятно, выдает ошибку обещания на консоль, когда вы оставили ее невключенным (.catch
сразу после .post
).
Просто удалите (временно) .catch
и узнайте, в какой части он выходит из строя - из журнала консоли.
После устранения обещания catch
используется, чтобы поймать любую ошибку из любого блока then
. Поэтому, если вы поместите блок catch
после then
, будет обнаружена первая ошибка, из которой могут возникнуть предыдущие блоки then
. Таким образом, использование catch, в котором вы использовали, не имеет смысла, также первый блок then
получает возвращаемое значение из обещания после его разрешения.
В блоке catch:
do console.log(error)
, чтобы узнать, какую ошибку вы получите.
Также для извлечения значений из разрешенных функций Promise используйте eventlisteners
(чтобы разбить цепочку).