非同期処理をPromise でシーケンシャルに処理
まあ,車輪の再開発。ただ,Promiseとか難しいこと考えずに,再利用できないとね。。。
rejectは使わないだろうから省略。
resolve もなくしたいけど,非同期ができないからね。。。
var Queue = function() { this.promise = Promise.resolve(true); this.addAsync = (action) => this.promise = this.promise.then(() => new Promise((resolve) => action(resolve))); this.addSync = (action) => this.addAsync((resolve) => { action(); resolve(); }); this.delay = (delay) => this.addAsync((resolve) => setTimeout(resolve, delay)); }; var list = [ { id: 1, name: 'taro' }, { id: 2, name: 'jiro' }, { id: 3, name: 'saburo' } ]; var q = new Queue(); list.forEach((args) => { q.addAsync((resolve) => { console.log(args); setTimeout(resolve, 1000); }); }); list.forEach((args) => { q.delay(1000); q.addSync(() => console.log(args)); });
参考:
http://kitak.hatenablog.jp/entry/2014/12/01/234759
https://qiita.com/AkihiroTakamura/items/1fdf6dfcb5cb8d5cfc4c