In addition to @pateh’s answer, I should point out that the view rendering is queued before dispatching effects, however rendering currently happens asynchronously through requestAnimationFrame so may not have finished rendering by the time a command is executed.
The tasks exposed through the DOM module all handle this gracefully: they queue their callbacks using requestAnimationFrame. In practice, this means they will see the updated view.
When dealing with ports, the same can be achieved by using requestAnimationFrame in the port callback:
app.ports.somePort.subscribe(function (arg) {
window.requestAnimationFrame(function () {
// When code here is triggered, the view will have rendered with the `model`
// returned from the `update` that also caused this port to be called.
})
})