Node.js - 使用 Promise.all() 加载并执行多个函数

标签 node.js promise anonymous-function es6-promise

我正在开发一个“插件”概念,其中我有一系列文件,每个文件包含一个函数(插件)。我想使用 promise.all() 自动加载并执行它们。

问题:每个插件函数不执行。

这是我的示例插件plugins/example.js:

"use strict";

exports = function() {
    return new Promise(function(resolve, reject) {
        console.log("Plugin running....");
        setTimeout(resolve, 200, 'example plugin succeeded!');
    });
};

然后,我从我的 app.js 中使用 require-all 加载所有插件NPM模块:

const plugins = require('require-all')(__dirname + '/plugins');

然后我尝试将所有内容作为我的 promise 链的一部分执行:

return Promise.all([plugins]);

该函数不进行任何记录。有趣的是,当我记录 plugins 的内容时,我看到一个空对象:

{
    "example": {}
}

任何人都可以告诉为什么示例函数没有被调用吗?

最佳答案

一种方法是像下面这样。假设有一个 plugins 目录,其中包含 pluginA.jspluginB.js、...、pluginZ.js 等文件。正如您在问题中所述,从这些插件导出的值始终是一个将返回 promise 的函数。我将创建 plugins/index.js 来导出这些插件中的所有内容,例如:

// plugins/index.js
'use strict'

const pluginA = require('./pluginA')
const pluginB = require('./pluginB')
...
const pluginZ = require('./pluginZ')

module.exports = [ pluginA, pluginB, ..., pluginZ ]

那么你可以按如下方式使用它:

// foo.js
'use strict'

const _ = require('lodash')
const plugins = require('./plugins')

Promise.all(_.map(plugins, (fn) => fn()))
.then((data) => console.log(data))
.catch((err) => console.log(err))

关于Node.js - 使用 Promise.all() 加载并执行多个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40366041/

相关文章:

AngularJS:我应该如何更新我的 watch 监听器内已解决的 promise 的属性?

javascript - Sequelize 查询中正确的 promise 链接

c# - 匿名方法如何省略参数列表?

c# - Action/delegate 可以更改它的参数值吗?

node.js - 安装后如何将 Electron 安装位置添加到 PATH 变量

node.js - 基于标签 lambda 函数的关闭/启动 ec2 实例不起作用

javascript - ffmpeg错误事件监听器中的Sinon stub

javascript - 如何将以下 "then"转而使用 await/async(map 函数)?

node.js - 使用 Heroku 构建可扩展分析后端的最佳方法是什么?

javascript - 我可以将 RegExp 和 Function 存储在 JSON 中吗?