这里用 block 方式，流程看起来就更加明显一些