Меня смущает семантика комбинатора 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)
(что такжебудущее) пока не решится.Наконец все решено.
Это правильный способ думать об этом?Зачем нам второй слой фьючерсов?