再帰 with promise pattern ref: http://qiita.com/items/86ad078cd6d9e1bf0a3d