Для чего в промисах используются return?
Объясните, пожалуйста, для чего вообще в промисах используются return'ы? Например, вот в этих ситуациях:
fsp.readFile('./first', 'utf-8')
.then((data1) => {
console.log(data1);
// Читаем файл и продолжаем промис от этой внутренней функции
return fsp.readFile('./second', 'utf-8').then((data2) => {
console.log(data2);
// Читаем файл и продолжаем промис от этой внутренней функции
return fsp.readFile('./third', 'utf-8').then((data3) => {
console.log(data3);
});
});
});
fs.readFile(filename, 'utf-8')
.then((content) => {
return fs.unlink(filename).then(() => {
return content;
});
})
.then((content) => {
// где-то тут создаем новый файл, с обновленным контентом
});
В общем случае в промисах есть два варианта использования return:
используется для возврата значения из промиса. В асинхронных запросах на колбеках передаются функции-колбеки, в которые передается результат. В промисах же колбека нет. Чтобы использовать результат асинхронной функции в промисах, возвращается (return) нужный результат. Этот возвращаемый результат попадет в следующую цепочку then
второй случай — это когда возвращается сам промис. Возвращать промис нужно, чтобы следующая цепочка
then
могла выполнить этот промис и получить его результат. Например, есть функция внутри которой используется промис и он не возвращается:const func = () => { const promise = new Promise((resolve, reject) => { setTimeout(() => { console.log('promise done!'); resolve('result from promise'); }, 1000); }); };
то вызывая такую функцию, нет возможности получить результат асинхронной функции. Невозможно даже контролировать выполнение этой функции:
console.log('begin');
func();
console.log('end');
// begin
// end
// promise done!
В первом примере return
используется для возврата промиса, что бы следующая цепочка then получила его и выполнила.
Во втором пример, внутри первого then вызывается асинхронная функция, которая возвращает новый промис. На нем вызывается then — этот then ждет выполнения этого промиса и вызывает переданный колбек. Результат этого колбека передастся в следующую цепочку then. В данном случае это будет content.
"Во втором пример, внутри ..." как это можно понять. если уже начали писать обьяснение - ну пожалуйста обьясните , не статья а просто отмазка ,лишь бы было