Для чего в промисах используются 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) => {
    // где-то тут создаем новый файл, с обновленным контентом 
  });
Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
08 декабря 2022

В общем случае в промисах есть два варианта использования return:

  1. используется для возврата значения из промиса. В асинхронных запросах на колбеках передаются функции-колбеки, в которые передается результат. В промисах же колбека нет. Чтобы использовать результат асинхронной функции в промисах, возвращается (return) нужный результат. Этот возвращаемый результат попадет в следующую цепочку then

  2. второй случай — это когда возвращается сам промис. Возвращать промис нужно, чтобы следующая цепочка 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.

25 0
Аватар пользователя Den Drop
Den Drop
14 июня 2023

"Во втором пример, внутри ..." как это можно понять. если уже начали писать обьяснение - ну пожалуйста обьясните , не статья а просто отмазка ,лишь бы было

11 9
Аватар пользователя Ярослав Селютин
Ярослав Селютин
22 марта 2025

Представь, что мы волшебники, и у нас есть волшебная палочка, которая может делать разные чудеса. Но иногда, чтобы чудо случилось, нужно подождать, например, пока сварится волшебное зелье или пока прилетит волшебная птица.

  • Обещание (промис): Это как записка, которую мы оставляем, говоря: "Я сделаю чудо, когда зелье будет готово!"
  • Волшебное зелье (асинхронная операция): Это то, что мы делаем, пока ждём.
  • Результат: Это само чудо, которое мы покажем, когда зелье сварится.

Теперь, когда зелье готово, мы говорим: "Та-дам!" и показываем чудо. Вот это "та-дам!" и есть "return". Это как мы показываем результат нашего обещания.

То есть, "return" нужен, чтобы:

  • Показать, что мы выполнили наше волшебное обещание.
  • Передать результат нашего волшебства, чтобы другие волшебники могли его использовать.

Например:

  • Мы обещаем превратить лягушку в принца. "return" — это когда принц появляется.
  • Мы обещаем достать звезду с неба. "return" — это когда звезда оказывается у нас в руках.

В общем, "return" — это как волшебное слово, которое говорит: "Вот, я сделал, как обещал!"

gemini

1 0
Познакомьтесь с основами JavaScript бесплатно