2017-03-06 4 views
0

私は3つの関数func1()、func2()、func3()を持っています。彼らはお互いに独立しています。私はこれらの3つのメソッドを並列に、そして1つのコールバックメソッドで実行したいと思います。このような可能性がありますjQuery/Javascript関数の実行

function parentMethod(){ 
call ([func1(),func2(), func3()],<callback function>); 
} 

コールバック機能はオプションですが、これらの3つの機能を並行して実行できます。

+0

'parentMethod()'の中で直接関数を実行するだけではどうですか?彼らは非同期関数ですか? – BenM

答えて

3

Promise.all与えられた約束の答えに追加

Promise.all([func1, func2, func3]).then(values => { 
    //values from all the functions are in the callback param 
}); 
+0

ありがとうございます。ちょうど確認するために、それはES 6の一部ですか? – Debopam

+0

正しいですが、あなたがまだES6を使うことができない場合、またはあなたが透明にすることができる場合にはシムがありますが、Promise.allは私の人生をはるかに容易にしました –

+0

しかし、IEはPromiseをサポートしていません。何か回避策はありますか?もしそうでなければ、私はその場合にバベルを使用します。 – Debopam

2

と約束チェーンを使用して、あなたは彼らがすでに約束を返さない場合は、あなたの機能を「promisify」する必要があります(このデモは、エラーの最初のを前提としていコールバック):

let promises = [func1, func2, func3].map(func => { 
    return new Promise((resolve, reject) => { 
     func((err, data) => { 
      if (err) { 
       reject(err); 
      } else { 
       resolve(data); 
      } 
     }) 
    }); 
}); 

Promise.all(promises) 
    .then((results) => { 
     let [func1Data, func2Data, func3Data] = results; 
    }) 
    .catch(err => { 
     console.log('error!', err); 
    });