function measure(box) { const width = box.width + box.borderLeft + borderRight; const position = yield width; return { left: position.left + box.borderLeft }; } const measuredBox = measure(myBoxProps); const width = measuredBox.next().value; const initialOffset = measuredBox.next({ left: 0 }); // oops, now I need a different position const replayedMeasuredBox = measure(myBoxProps); replayedMeasuredBox.next(); // wasted const shiftedOffset = replayedMeasuredBox.next({ left: 10 });