【发布时间】:2018-01-18 11:10:57
【问题描述】:
小问题:为什么 Javascript 中没有 Promise.chain(类似于 Promise.all)?我的实现还好吗?
我的“编解码器”行为错误:
- 从 XML 文件中读取图形
- 创建所有节点(创建方法返回一个promise)
- 等待所有节点创建完成
- 在节点之间创建所有边
问题:创建节点(第 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();
}
})
}
【问题讨论】:
-
这会在传递一个空数组时中断(我认为)。
-
你是对的!将在这里包括一张支票。谢谢