2016-07-08 9 views
0

値の配列からパラメータをループして関数を実行したいとします。すべての実行は前の完了を待つ必要があります。 以下の例のコードは印刷する必要があります:Promiseのシリアル実行

Done: 1 
Done: 2 
Done: 3 
Done: 4 
Done: 5 

感謝を!

p。

'use strict'; 

function f1(value) { 
    return new Promise((resolve, reject) => { 
     setTimeout(function() { 
      console.log('Done: ' + value); 
      resolve(true) 
     }, Math.random() * 2000 + 1000); 
    }); 
} 

const vs = [0,1,2,3,4,5]; 

vs.reduce((start, next) => { 
    return f1(next) 
}) 
+0

私はこれをanglejs約束を使って作ったが、全く同じことをネイティブで行うことができる。 https://gist.github.com/ste2425/608b74d20504d526d2c08dd8fa76f675 – ste2425

答えて

2

あなただけのES6をしたい場合は、この試してください:あなたは解像度から値を得ることに興味があるなら、あなたにもthis試すことができます

'use strict'; 

function f1(value) { 
    return new Promise((resolve, reject) => { 
     setTimeout(function() { 
      console.log('Done: ' + value); 
      resolve(true) 
     }, Math.random() * 2000 + 1000); 
    }); 
} 

const vs = [0,1,2,3,4,5]; 

let promiseChain = vs.reduce((start, next) => { 
    return start.then(() => f1(next)); 
}, Promise.resolve()); 

promiseChain.then(() => console.log('Done!')); 

を。

+1

これは私がやろうとしていることです!ありがとう – goliardico

+1

または単に '対比((p、v)=> p.then(()=> f1(v))、Promise.resolve())'です。 – jib

+0

右、同じこと。私はちょうど複数の行を選択し、可読性を向上させるために質問から変数名を再利用しました。 – dvlsg

関連する問題