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。所有
都接受一系列承诺,两种不同的东西你从来没有真正调用导出的函数,对吧?太棒了-谢谢你的指导,非常有用。