Node.js-使用Promise.all()加载和执行多个函数
我正在开发一个“插件”概念,其中我有一系列文件,每个文件都包含一个函数(插件)。我想使用Node.js-使用Promise.all()加载和执行多个函数,node.js,promise,anonymous-function,es6-promise,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....");
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中,使用NPM模块加载所有插件:
const plugins = require('require-all')(__dirname + '/plugins');
然后,我尝试将所有这些作为我承诺链的一部分来执行:
return Promise.all([plugins]);
该函数不进行日志记录。有趣的是,当我记录插件的内容时,我看到一个空对象:
{
"example": {}
}
有人能告诉我为什么不调用示例函数吗?一种方法是如下所示。假设有一个plugins
目录,其中包含pluginA.js
,pluginB.js
,…,pluginZ.js
。正如您在问题中所述,从这些插件导出的值始终是一个会返回承诺的函数。我将创建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))
RequireAll插件返回一个对象,其中包含插件名称作为键,导入作为值,因此您必须获取值,然后调用这些函数来获取承诺,然后您将拥有一个承诺数组
const plugins = require('require-all')(__dirname + '/plugins');
var promises = Object.keys(plugins).map(function(key) {
return plugins[key]();
});
Promise.all(promises).then(function() {
// all done
}).catch(function(err) {
// fail
});
plugins
是一个对象,其中的键和值表示加载的插件和promise。所有
都接受一系列承诺,两种不同的东西你从来没有真正调用导出的函数,对吧?太棒了-谢谢你的指导,非常有用。