我有一个函数数组需要从 JSON 文件中读取:
“functionArray”:[“task1()”,“task2()”,...,“taskN()”]
我的要求是按顺序调用这些任务,以便只有在任务1函数成功执行后才调用任务2函数。使用这些函数的包装器将具有函数定义。
<小时/>函数任务1(){
console.log('任务1内部');
}
函数任务2(){
console.log('任务2内部');
}
var functionArrayToBeUsed = readFromJson(functionArray);
\\functionArrayToBeUsed 包含需要完成的所有任务
使用 Promise 来完成此操作的理想方法是什么。
最佳答案
假设 JSON 以以下形式提供:
"functionArray" : ["task1", "task2", ... , "taskN"]
...并且任务是 tasks
对象的属性...
var tasks = {
task1: function () {
console.log('Inside task1');
},
task2: function () {
console.log('Inside task2');
}
};
...那么你可以按如下操作。
同步任务
var functionArray = readFromJson(functionArray);
functionArray.reduce(function(previousResult, taskName) {
return tasks[taskname](previousResult);
}, null);
异步(或混合)任务
var functionArray = readFromJson(functionArray);
functionArray.reduce(function(p, taskName) {
return p.then(tasks[taskname]);
}, Promise.resolve());
在这两种情况下,数组方法 .reduce()
提供了一种构建 .then()
链的紧凑方法,并以已解决的 promise 作为种子以开始工作。
这些示例为您提供的内容超出了您的要求。在每种方法中,结果都会从每个函数传递到下一个函数。如果函数不接受任何参数,那么此功能不会造成任何损害。
也就是说,如果任何函数可能返回 undefined
,则所有内容都需要进行更具防御性的编码。
关于javascript - Bluebird 对一系列功能的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892726/