javascript - Bluebird 对一系列功能的 promise

标签 javascript arrays node.js promise bluebird

我有一个函数数组需要从 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/

相关文章:

java - 存储数组 - MYSQL

javascript - 获取终端响应并将其存储为 Node js中的变量

node.js - 更改系统时间时如何使用 setInterval/setTimeout 解决 NodeJS 稳定错误

javascript - expressGraphQL 不是函数

javascript - 服务器端 CSV 文件将其转换为 JavaScript 数组

javascript - 在元素附近激活悬停的方法

Node.js 服务器的 Socket.IO 解释?

javascript - 如何自动扩展从输入字段过滤的AngularJS数据?

php - 尝试实现多个关键词搜索但无法得到想要的结果

ios - 如何在 Swift 中正确声明自定义对象数组?