transform vs transformDeferred

Sep 03 2020

Proje reaktör akısı transformve transformDeferredarasındaki fark nedir .

İyi bir örnek yardımcı olacaktır.

https://projectreactor.io/docs/core/release/reference/index.html#advanced-mutualizing-operator-usage

Yanıtlar

3 SimonBaslé Sep 10 2020 at 17:34

Çoğu zaman, a Flux"tembeldir": bir işleme ardışık düzeni bildirirsiniz, ancak veri akışı yalnızca ona abone olduğunuzda başlar . Birden çok kez abone olabilirsiniz.

Buna soğuk denir Flux(ve bir soğuk kaynağa her abone olduğunuzda, kaynak yeni abonenin yararına verilerini yeniden oluşturur).

Böylece ayırt edebiliriz:

  • montaj süresi : biz üzerinde operatörleri aramak an FluxÖrneğin, yeni bir dönen Fluxörneği
  • abonelik süresi : o örneğin abone olduğu an. Aslında, anlar (çoğul), çünkü birbirinden çok uzak olabilecek birden fazla abonelik olabilir.

transformbelirli bir operatör kümesini uygulamak için uygun bir yöntemdir Flux. Örneğin Flux, bir hizmetin yöntemleriyle döndürdüğünüz her şeyin kullanılmasını .log("serviceName")istiyorsunuz, bu nedenle bu özelliği bir static Function<Flux, Flux>:

loggingTrait = f -> f.log ("hizmetAdı"); `

Artık bu özelliği hizmetin tüm Akı geri dönüş yöntemlerinde uygulayabilirsiniz transform.

Derhal, montaj anında uygulanır. Aboneler peşinden geldiklerinden, hepsi işlevin aynı sonucunu "paylaşır".

Şimdi, örneğin oturum açmayı istediğinizi hayal edin. abonelik zamanını veya her bir aboneye daha fazla bağımlı olan başka bir veri parçasını içerir.

İşte burada devreyetransformDeferred giriyor: ' nin uygulamasını aboneliğin gerçekleştiği ana erteliyorFunction . Ayrıca, FunctionEACH aboneliği için geçerlidir .

Böylece şöyle bir şey yapabilirsiniz:

loggingTrait = f -> f.log(serviceName + "@" + System.currentTimeMillis());

Günlük kategorisi her abone için farklı olacaktır.