Как вложенный Javascript возвращает обещания «пройти мимо»? - PullRequest
0 голосов
/ 31 августа 2018

Этот вопрос состоит из двух частей, обе из которых касаются того, как обещания Javascript передаются функциям с помощью операторов возврата.

1)

У меня есть простая функция Javascript, которая включает несколько операторов return. Внутренняя функция возвращает обещание функции стрелки, функция стрелки также возвращается, как это:

const returnMe(data){
  return () => {
    return Promise.resolve(data);
  };
};

Могу ли я написать следующий код?

returnMe("Hello!").then((msg) => { console.log(msg) }); /// --> output "Hello!" ??

Другими словами, если вложенная функция получает разрешенное / отклоненное обещание, и эта функция возвращается к своей родительской функции, получает ли родительская функция полученное / отклоненное обещание?

2)

Другой, связанный, но несколько другой пример ....

 const returnMe(data){
    return () => {
      return Promise.resolve(data).then(() => { console.log("Ha!") });
    };
 };

В этом случае вызов функции then происходит внутри функции. Тогда называет "израсходовать" обещание? В этом случае, что возвращается в функцию стрелки, а затем в родительскую функцию?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 31 августа 2018

1) Поскольку returnMe() возвращает функцию, вы должны вызвать эту функцию. Это вернет обещание, которое вы затем можете использовать с .then()

function returnMe(data){
  return () => {
    return Promise.resolve(data);
  };
};

returnMe("Hello!")().then(msg => console.log(msg));

2) Внутренний .then() потребляет данные, к которым относится обещание, но возвращает новое обещание. Таким образом, вы можете позвонить .then() по этому вопросу.

Как и в примере 1, вам нужно вызвать функцию, которую возвращает returnMe(), чтобы выполнить внутреннюю функцию.

function returnMe(data){
    return () => {
      return Promise.resolve(data).then(() => { console.log("Ha!") });
    };
 };
 
 returnMe("Hello!")().then(() => console.log("Done!"));
...