Какова семантика будущего :: тогда? - PullRequest
0 голосов
/ 26 октября 2018

Меня смущает семантика комбинатора then.

Интуитивно, a.then(|r| f(r)) - это будущее, которое, когда a заканчивается на r, разрешается до f(r).Другими словами, сочинение f после a.Например, a читает число из ввода / вывода, а f удваивает его.Это имеет смысл, и это была моя ментальная модель.

Копать глубже, на самом деле есть нечто большее.Закрытие, переданное then, дает IntoFuture, что означает применение f к результату a и возвращает другое будущее.Приведенное выше понимание неверно, так как f(r) все еще не полностью разрешен.

Из того, что я прочитал в документации и исходном коде, кажется, что следующее: a.then(|r| f(r)) по существу продолжает опрашивать, пока не будет решено будущее a, затем продолжайте опрашивать f(r) (что такжебудущее) пока не решится.Наконец все решено.

Это правильный способ думать об этом?Зачем нам второй слой фьючерсов?

1 Ответ

0 голосов
/ 26 октября 2018

then не ожидает завершения будущего. Это лениво, как сказано в документе:

Закрытие запускается только после успешного завершения будущего self.

Это в основном цепочки 2 фьючерсов. Предположим, у вас есть:

  • одно будущее future_a, которое "вычисляет" a,
  • один метод foo, который принимает a и возвращает future_b.
future_a.then(foo)

будет будущим, которое объединит эти 2 фьючерса, чтобы вернуть future_b

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