Node.js - 使用 Promise.all() 加载和执行多个函数
Node.js - load and execute multiple functions using Promise.all()
我正在开发一个 "plugins" 概念,其中我有一系列文件,每个文件包含一个函数(插件)。我想使用 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');
然后我尝试执行所有作为我的承诺链的一部分:
return Promise.all([plugins]);
该函数不进行任何日志记录。有趣的是,当我记录 plugins
的内容时,我看到了空对象:
{
"example": {}
}
谁能告诉我为什么没有调用示例函数?
一种方法如下。假设有一个 plugins
目录,其中包含 pluginA.js
、pluginB.js
、...、pluginZ.js
等文件。正如您在问题中所述,从这些插件导出的值始终是一个 return 承诺的函数。我会创建 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 插件 returns 包含插件名称作为键、导入作为值的对象,因此您必须获取值,然后调用这些函数来获取承诺,并且然后你会有一系列的承诺
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.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');
然后我尝试执行所有作为我的承诺链的一部分:
return Promise.all([plugins]);
该函数不进行任何日志记录。有趣的是,当我记录 plugins
的内容时,我看到了空对象:
{
"example": {}
}
谁能告诉我为什么没有调用示例函数?
一种方法如下。假设有一个 plugins
目录,其中包含 pluginA.js
、pluginB.js
、...、pluginZ.js
等文件。正如您在问题中所述,从这些插件导出的值始终是一个 return 承诺的函数。我会创建 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 插件 returns 包含插件名称作为键、导入作为值的对象,因此您必须获取值,然后调用这些函数来获取承诺,并且然后你会有一系列的承诺
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
});