Может быть, я медлительный. Может быть, большинство людей поднимают это без чьей-либо помощи. Может быть, в Интернете есть масса руководств, которые я пропустил. Я не знаю, но мне потребовалось больше года, чтобы понять, что я собираюсь здесь обсудить.
Я смутно припоминаю, что видел примеры этого ранее, но для меня это не имело смысла, и если я когда-либо читал какое-либо объяснение этого, оно не прижилось. Итак, вот оно, объяснение, которое я хотел бы иметь.
Распространенной ситуацией в JavaScript является код, напоминающий:
Promise .then(function(args){ handle args; return value; }) .then(function(args){ handle args; return value; }) .then(function(args){ handle args; return value; }) … .catch(function(error){ handle error; })
Многие люди сокращают это, так что это выглядит так:
Promise .then((args)=>{ handle args; return value; }) .then((args)=>{ handle args; return value; }) …
Или, если нет нужды сильно возиться с аргументами, это может быть даже:
Promise .then((args)=> value) .then((args)=> value ) …
Я думаю, что в этой версии я должен понять это раньше, но, возможно, я не единственный здесь тугодум, поэтому я решил поделиться этим на всякий случай.
Аргументы во втором (и т. д.) .then — это то, что возвращается из предыдущего.
Итак, такой код:
Promise .then((arg)=>arg+1) .then((arg)=>arg+1) .then((arg)=>console.log(arg))
Уилл, предполагая, что первый «аргумент» равен нулю, в конечном итоге выведет на консоль число 2.
Хорошо, это не такой уж большой скачок, но вот большая часть этого уравнения, которая просто попала в точку для меня.
Этот блок выше можно записать:
Promise .then(arg=>arg+1) .then(arg=>arg+1) .then(console.log)
Он будет работать точно так же. Вместо того, чтобы создавать функцию закрытия с аргументом, а затем передавать ее в консоль, я могу просто предоставить функцию console.log, и ей автоматически будет передано значение, возвращенное из предыдущего блока .then.
Вы можете сделать это с любой функцией, включая собственную.
Возможно:
function compress(str){ return compressedString; } function send(str){ wretch(“send/url”).post(str) } Promise .then(JSON.stringify) .then(compress) .then(send)
Такое разбиение моего кода на фрагменты делает его гораздо более читабельным и аккуратным. Это позволяет мне разбиваться на модули в разные файлы, что упрощает обслуживание кода.
В общем, я нахожу это очень полезным лакомым кусочком мелочей, и мне жаль, что я не разобрался с ним раньше.
Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку здесь.