簡短的問題:爲什麼在Javascript中沒有Promise.chain(相當於Promise.all)?我的實施是否?在Javascript中實現Promise.chain([...])?
我的「編解碼器」乖錯:
- 從XML文件
- 創建的所有節點讀取曲線(對創作方法返回一個承諾)
- 等待所有節點創作完成
- 創建節點之間的所有邊界
問題:數據庫的順序調用f或者節點創建(步驟2)在執行時混淆起來。
解決方案:在方法執行之前,我必須以正確的順序鏈接數據庫調用。
/**
* chains a list of functions (that return promises) and executes them in the right order
* [function() {return Promise.resolve();}, function() {return Promise.resolve();}]
*
* @param funcs is an array of functions returning promises
* @returns {Promise}
*/
function chain_promises(funcs) {
if (funcs.length < 1) {
return Promise.resolve();
}
var i = 0;
return chain_executor(funcs, i);
}
/**
* Recursive help method for chain_promises
* 1) executes a function that returns a promise (no params allowed)
* 2) chains itself to the success resolve of the promise
*
* @param funcs is an array of functions returning promises
* @param i is the current working index
*/
function chain_executor(funcs, i) {
var promise = funcs[i]();
return promise.then(function(){
console.log(i);
if (funcs.length > i+1) {
return chain_executor(funcs, i+1);
} else {
return Promise.resolve();
}
})
}
這打破了(我認爲)時結束傳遞一個空數組。 – Soronbe
你是對的!在這裏包括一張支票。謝謝 – Danipol
[ES6 Promise - 類似於async.each的東西]的可能重複(https://stackoverflow.com/questions/32028552/es6-promises-something-like-async-each) – jib