【问题标题】:nodejs async waterfall use function from external required javascript filenodejs异步瀑布使用来自外部所需javascript文件的功能
【发布时间】:2018-06-09 03:17:51
【问题描述】:

我对 nodejs 相当陌生,为了保持我的代码简短,我希望我可以使用我包含在我的异步瀑布函数列表中的 .js 文件中的函数。我试图包含一个函数,但得到一个“TypeError:回调不是函数”异常或“无法读取未定义的属性‘Symbol(Symbol.toStringTag)’”。我已经搜索和搜索并找不到答案,但希望有人能给我最好的方法,就像回调和函数一样,我不确定最好的解决方案是什么。

希望我的代码是这样的:

var module1 = require('./lib/module1.js'),
   module2 = require('./lib/module2.js');

async.waterfall([
   module1.externalfunc1,
   module2.externalfunc2
], function (err, result) {
if (err) {
    console.log('ERROR: ');
    console.log(err);
} else {
    console.log('Completed streaming1');
    console.log(result);
}

我的猜测是我应该把瀑布函数放在另一个函数中,比如 function(){module1.externalfunc;},function(){module2...

认为我对回调的理解不够好,因为我不确定外部函数是否会知道“回调”是什么,因为它在瀑布代码之外。但我必须相信这是可能的。

感谢您的帮助。

意思是说,我创建了一个定义了函数的 externalfunc1,我将其导出,所以在文件中有:

function externalfunc1(param1, callback){...} 
module.exports = externalfunc1;

【问题讨论】:

  • 如果您想说的内容与您的问题不同,那么只需使用“编辑”链接来编辑您的问题以修复它。
  • 我怀疑你没有正确导出函数,你能分享module1.js文件的内容吗?
  • 要直接使用外部函数,它们必须具有async.waterfall() 所期望的完全正确的调用签名(完全相同的参数)。如果他们不这样做,你必须将它们包装在另一个函数中。
  • 谢谢,@asosnovsky 和 ​​jfriend00,我在上面添加了我的编辑,它完全一样,一个有 2 个参数的函数,函数使用的 param1 和回调。仅导出函数名称。我需要module.exports = externalfunc1(param1, callback) 吗?

标签: javascript node.js asynchronous waterfall


【解决方案1】:

您面临的问题是将函数externalfunc1 作为整个模块导出。即

var module1 = require('./lib/module1.js')
module1  === externalfunc1

要么将导出更改为:

module.exports = { externalfunc1 }

或导入为:

var externalfunc1 = require('./lib/module1.js')

【讨论】:

  • 感谢@asosnovsky 修复了它,显然我并没有完全理解我要导出的内容
猜你喜欢
  • 2019-01-02
  • 2014-10-09
  • 2018-04-29
  • 2018-11-13
  • 2019-10-17
  • 1970-01-01
  • 2016-01-20
  • 2023-03-20
  • 2017-04-26
相关资源
最近更新 更多