We can use the wiretap
method of the Promise
interface to listen in on results. We write an Action
implementation which has the result of a Promise
encapsulated in a Result
object. The wiretap
method can be used to do something with a Promise
value without interrupting a method chain.
In the following example we tap in on Promise
results:
import com.mrhaki.ratpack.Book import com.mrhaki.ratpack.BookService import com.mrhaki.ratpack.DefaultBookService import org.slf4j.Logger import org.slf4j.LoggerFactory import ratpack.exec.Result import ratpack.jackson.Jackson import static ratpack.groovy.Groovy.ratpack final Logger logger = LoggerFactory.getLogger(ratpack.class) ratpack { bindings { bind(BookService, DefaultBookService) } handlers { BookService bookService -> get('book/:isbn') { final String isbn = pathTokens.isbn bookService .findBook(isbn) .wiretap { Result<Book> result -> logger.debug 'Book {}', result.value } .map({ Book book -> [author: book.author, title: book.title] }) .wiretap({ Result<Map<String, String>> result -> logger.debug 'Book as map {}', result.value }) .map(Jackson.&json) .then { bookAsJson -> render(bookAsJson) } } } }
Written with Ratpack 1.1.1.