[minor] allow render to be called sync and async