JS лямбда возвращаемое значение по умолчанию - PullRequest
0 голосов
/ 11 ноября 2018

Я немного запутался с возвращаемым по умолчанию значением лямбды в node.js. Я нашел эту ссылку "Функции стрелок" :

Функции стрелок могут иметь либо «краткое тело», либо обычный «блок». тело».

В кратком теле указано только выражение, которое становится неявное возвращаемое значение. В теле блока вы должны использовать явное возврат заявления.

var func = x => x * x;                  
// concise body syntax, implied "return"

var func = (x, y) => { return x + y; }; 
// with block body, explicit "return" needed

Это довольно ясно, но потом я наткнулся на этот фрагмент кода Express, который я тестировал, который возвращает последнее выражение по умолчанию без необходимости использования «return»:

const express = require('express');
const app = express();

app.use('/api/posts', (req, res, next) => {
  const posts = [
    {
      id: 'sdfj234j654j',
      title: 'First server-side post',
      content: 'This is comming from the server'
    },
    {
      id: '9054jk4ju59u90o',
      title: 'Second server-side post',
      content: 'This is comming from the server!'
    }
  ];
  // this is returned by default and does not require "return "
  res.status(200).json({
    message: 'Posts fetched succesfully!',
    posts: posts
  });
});

Так что же мне нужно, чтобы использовать выражение return в лямбдах, когда я использую кавычки блока, чтобы определить их или нет? или есть исключение, о котором я не знаю?

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Я считаю, что все, что вы пометили как «возвращено по умолчанию», на самом деле не возвращается.Функция возвращает undefined, как и любая функция без оператора возврата.В app.use происходит то, что всякий раз, когда встречается конкретный маршрут, вызывается функция, вот и все.res.status пишет только в сеть и не возвращает никакого значения.

0 голосов
/ 11 ноября 2018

Функция стрелки в вашем примере ничего не возвращает. Однако он пишет в res ponse, вызывая .json({ /*...*/}), поэтому он как бы «возвращает» json клиенту.

Упрощенный пример:

  setTimeout(() => {
    console.log("test");
  }, 1);

Приведенный выше код выводит что-то на консоль, хотя из функции стрелки ничего не возвращается.

...