我正在开发一个“插件”概念,其中我有一系列文件,每个文件包含一个函数(插件)。我想使用 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.js
、pluginB.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/