如何将节点中的异步回调添加到函数调用?

Posted

技术标签:

【中文标题】如何将节点中的异步回调添加到函数调用?【英文标题】:How to add async callbacks in node to a function call? 【发布时间】:2015-06-10 17:09:55 【问题描述】:

问题太宽泛/不清楚。任何对此答案感兴趣的人都可以访问:Creating Callbacks for required modules in node.js

基本上,我在我的节点应用程序中包含了一个 CLI 包。我需要 CLI 来启动一个新项目(这需要为该项目创建一个文件夹)。创建项目文件夹后,我需要在文件夹中创建一些文件(使用 fs writeFile)。现在的问题是,我的 writeFile 函数在 CLI 包创建文件夹之前执行(这是由我的 console.log 检测到的。这让我想到了主要问题。

我可以在不修改我包含的包的情况下向 CLI.new 添加异步回调函数吗?

  FoundationCLI.new(null, 
    framework: 'sites', // 'apps' or 'emails' also
    template: 'basic', // 'advanced' also
    name: projectName,
    directory: $scope.settings.path.join("")
  );

  try
    if (!fs.existsSync(path))
      console.log("DIRECTORY NOT THERE!!!!!");
    
    fs.writeFileSync(correctedPath, JSON.stringify(project) , 'utf-8');
   catch(err) 
    throw err;
  

它使用基础-cli。新命令执行以下异步系列。我很想在包中添加一个回调 - 仍然不太确定如何。

async.series(任务,完成);

对此感兴趣的任何人都可能获得以下信息:

Creating Callbacks for required modules in node.js

【问题讨论】:

CLI 文档是否提到了完成回调? 他们没有提到完成回调。我愿意修改包以添加此功能,但我觉得我参加了一个我从未参加过的课程的决赛。 这里的CLI 是什么?除非你更具体,否则不可能知道它能做什么。如果可以编辑它,为什么不添加回调参数?值得注意的是,promises 通常更易于使用,您可以将它们链接在一起:CLI.new(...).then(...).then(...) 你能链接到你为CLI使用的模块吗?看似显而易见的cli package 似乎不是您使用的。 foundation-cli 似乎不打算用作 API,仅用作命令。您可能会submit an issue 要求提供回调选项。 【参考方案1】:

new 命令的代码似乎在https://github.com/zurb/foundation-cli/blob/master/lib/commands/new.js 上可用

编写此代码的目的不是为了以编程方式使用new 命令(它在任何地方都使用console.log),并且在工作完成时不会调用任何回调。

所以没有办法使用这个包来做你正在寻找的东西。修补软件包或找到其他方法来完成您想要实现的目标。

【讨论】:

我已经准备好修补软件包了。鉴于“完成”方法在完成后被 CLI 调用,它似乎并不过分复杂。 async.series(tasks, finish);。我的问题是……我在哪里可以了解我需要用来执行此操作的代码……我想象一个信号由“完成”方法广播,然后我在代码中使用信号处理程序捕获该信号。问题是我不知道如何使用节点来做到这一点。只有 C! 我不知道你在找什么。如果您需要自动化任务来设置项目或环境,请查看gruntgulp。 Foundation-cli 可能不是您项目的良好起点

以上是关于如何将节点中的异步回调添加到函数调用?的主要内容,如果未能解决你的问题,请参考以下文章

回调不是使用节点 js 的异步模块的 mongodb 查询中的函数

扭曲的延迟/回调和异步执行

如何使用回调在任何函数中调用异步等待方法

给元素添加子节点,元素子节点数改变,反过来影响上方调用其值的异步任务回调函数(如click。load,定时器等

给元素添加子节点,元素子节点数改变,反过来影响上方调用其值的异步任务回调函数(如click。load,定时器等

如何在收到异步函数的回调之前使线程休眠?