Возврат пустой функции стрелки в цепочке обещаний - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь понять блок кода здесь, который я считаю избыточным кодом, который можно удалить, но, возможно, я ошибаюсь, вот код:

return(
    myModule.getSomething(args.url)
    .then(stream => module.uploadData({
      param1: args.param1,
      param2: args.param2,
      param3: stream,
    }))
    .then(() => myBroker.dispatch({
        queueUrl: myQueueUrl,
        payload: JSON.stringify(args.payload),
      })
    )
    .then(msgInfo => {}) .  //This line can be removed right?
    .catch(error => {
      myBroker.dispatch({
        queueUrl: anotherQueueUrl,
        payload: JSON.stringify({ type: 'error', payload: `[ERROR] ${error}` }),
      });

      throw error;
    })
  );

Я считаю, что строка:

.then (msgInfo => {})

можно удалить, верно?функция стрелки ничего не делает, msgInfo - это то, что возвращает предыдущее предложение then после вызова myBroker.dispatch, и из-за этого я могу удалить строку, которую я упомянул правильно?

Может кто-нибудь дать мне четкое объяснениеэтот?Почему эта линия существует?Или объясните, почему я не могу удалить его?

PS: функция getSomething и uploadData возвращает обещание, функция отправки Я не так уверен, потому что это выглядит так:

return(
    client.sendMessage(parameters).promise()
    .then(data => data)
  );

Он возвращает только объект, который является «данными», верно?или он также возвращает обещание, потому что в конце он содержит предложение then?

Эта синтаксическая нотация с использованием нескольких функций then и стрелки сбивает меня с толку,

Заранее большое спасибо!

1 Ответ

0 голосов
/ 22 февраля 2019

Единственная причина, по которой я могу придумать, почему эта строка существует, заключается в том, что функция, в которой используется весь этот блок, находится где-то так, что значение разрешения myBroker.dispatch не должно (или лучше не) подвергаться воздействиюпотребитель большей функции.Например:

const thisModule = (() => {
  const myBroker = ...;
  function getSomethingAndDispatchBroker() {
    return(
      myModule.getSomething(args.url)
      .then(stream => module.uploadData({
        param1: args.param1,
        param2: args.param2,
        param3: stream,
      }))
      .then(() => myBroker.dispatch({
        queueUrl: myQueueUrl,
        payload: JSON.stringify(args.payload),
      }))
      .then(msgInfo => {})
      .catch(error => {
        myBroker.dispatch({
          queueUrl: anotherQueueUrl,
          payload: JSON.stringify({ type: 'error', payload: `[ERROR] ${error}` }),
        });
        throw error;
      })
    );
  }
  return { getSomethingAndDispatchBroker };
})();

Здесь функцию getSomethingAndDispatchBroker можно вызывать извне, но, возможно, значение разрешения myBroker.dispatch лучше оставить внутренним по отношению к thisModule - либо из-за конфиденциальности, либоиз-за ясности кода - возможно, вы только захотите, чтобы пользователи функции знали , если Обещание разрешено (если процесс завершился успешно), не сообщая им ненужные детали.это проблема, тогда да, не стесняйтесь удалить строку .then(msgInfo => {}).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...