Для чего в промисах используются 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.

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

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

4 7
Основы Frontend за 14 дней
  • 72 урока в онлайн-тренажере
  • 4 живых вебинара и масскодинг
  • Помощь наставника на весь период обучения

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки