如何通過使用q來併發執行多個promises呢?
q(q(1), q(2), q(3)).then(
function
(one, two, three) ,
function
(ex) );
//1
上面的**輸出結果為1。很顯然,你不能簡單地將各個promises都放到乙個q()函式裡來執行,這樣只有第乙個promise會被正確地執行,剩餘的都會被忽略掉。
你可以使用q.all來代替上面的方法,它們之間的主要區別是前者將每個promise單獨作為引數進行傳遞,而q.all則接收乙個陣列,所有要並行處理的promise都放到陣列中,而陣列被作為乙個獨立的引數傳入。
q.all([q(1), q(2), q(3)]).then(
function
(one, two, three) ,
function
(ex) );
//[1,2,3]
上面的**輸出結果為[1, 2, 3]。所有的promises都被正確執行,但是你發現q.all返回的結果依然是乙個陣列。我們也可以通過下面這種方式來獲取promises的返回值:
q.all([q(1), q(2), q(3)]).then(
function
(one, two, three) ,
function
(ex) );//1
//2//3
除此之外,我們還可以將then替換成spread,讓q返回乙個個獨立的值而非陣列。和返回陣列結果的方式相同,這種方式返回結果的順序和傳入的陣列中的promise的順序也是一致的。
q.all([q(1), q(2), q(3)]).spread(
function
(one, two, three) ,
function
(ex) );//1
//2//3
那如果其中的乙個或多個promsie執行失敗,被rejected或者throw error,我們如何處理錯誤呢?
q.all([q(1), q.reject('rejected!'), q.reject('fail!')]).spread(
function
(one, two, three) ,
function
(reason, otherreason) );
//rejected!
//undefined
如果傳入的promises中有乙個被rejected了,它會立即返回乙個rejected,而其它未完成的promises不會再繼續執行。如果你想等待所有的promises都執行完後再確定返回結果,你應當使用allsettled:
q.allsettled([q(1), q.reject('rejected!'), q.reject('fail!')]).then(
function
(results)
else
});});//1//
rejected!
//fail!
學習pthreads,使用互斥量進行同步
在進行多執行緒程式設計時,我們總會遇到全域性變數和資料結構的問題,這是多執行緒之間進行通訊的問題。如果多個執行緒同時讀寫乙個全域性變數,那麼會造成競爭或者出錯。為了解決這一問題,我們需要對全域性資料進行,使用互斥量實現鎖的機制,當某個執行緒在某個操作前進行了加鎖,那麼某個操作只能在這個執行緒進行,直...
多執行緒進行同步資料
開發中會有場景需要對接第三方系統.第三方系統往往會提供乙個中間庫,然後我們系統讀取中間庫的資料,然後經過一系列的邏輯,把資料存到自己系統中.在這裡分享一種通過生產者,消費者模式進行資料同步,接近實時 主要思路 乙個生產者執行緒,實時去中間庫查詢沒有同步的資料.多個消費者,消費生產者生產的資料 1.乙...
axios 進行同步請求 async await
介紹 axios 是乙個基於 promise 的 http 庫,它支援 promise api。像這樣 axios.post getsomething then res 而async await是一種建立在promise之上的編寫非同步或非阻塞 的新方法。async是非同步的意思,而await是as...