2017-03-06 136 views
0

我有3個函數func1(),func2()和func3()。他們彼此獨立。我想並行執行這三種方法,並使用單個回調方法。是否有可能是這樣的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。有什麼解決辦法嗎?如果沒有,那麼我會在這種情況下使用babel。 – 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); 
    });