only save results once, and pass them through map, chain, etc. functions when the listener is called