Javascript 为什么从未调用过Spawn()?
我对node.js和express有一些经验已经有相当一段时间了,但我在代码中一直遇到这个bug。在我的服务文件中,我在代码中已解析的承诺内调用spawn()。不知何故,我的spawn代码从未被调用(或者如果被调用,Javascript 为什么从未调用过Spawn()?,javascript,node.js,express,promise,spawn,Javascript,Node.js,Express,Promise,Spawn,我对node.js和express有一些经验已经有相当一段时间了,但我在代码中一直遇到这个bug。在我的服务文件中,我在代码中已解析的承诺内调用spawn()。不知何故,我的spawn代码从未被调用(或者如果被调用,ls.on('close')或ls.on('error')从未被调用),我不知道为什么。我想我了解Spawn()的异步本质,但我想我不了解 我看到了两种可能性: get\u username()返回的承诺最终可能会被拒绝。您没有一个.catch()处理程序来检测和处理它 另外,您的f
ls.on('close')
或ls.on('error')
从未被调用),我不知道为什么。我想我了解Spawn()
的异步本质,但我想我不了解 我看到了两种可能性:
get\u username()
返回的承诺最终可能会被拒绝。您没有一个.catch()
处理程序来检测和处理它finalSendFiles()
函数将在spawn()
操作完成之前返回很长时间,以防这也让您感到困惑spawn()
,然后返回finalSendFiles()
当然,除非使用spawnSync()
,否则在spawn()
完成之前(这是Javascript中异步逻辑的本质),否则无法阻止finalSendFiles()
返回spawnSync()
,这将在spawnSync()期间阻止整个过程
通常不希望在服务器中执行的操作
如果要保留spawn()
的异步版本,则需要从finalSendFiles()
返回一个承诺,该承诺链接到spawn()
操作的完成。您可以这样做:
const finalSendFiles=(uVal)=>{
log(“我在这里”)
返回get_用户名(uVal)。然后返回(函数(用户名值){
const pyScript=“./pythonFile.py”
//spawn python file-此命令是否确定承诺已得到解决?使用逐步调试程序时会发生什么情况?可能get_username()
返回的承诺最终会被拒绝。您没有.catch()
处理程序来检测和处理该承诺。此外,finalSendFiles()
函数将在spawn()
操作完成之前很久返回,以防这也是让您困惑的地方。@Dai-我该如何使用它?@jeff ridgeway所以我使用了这个代码,在我的终端中唯一打印出来的是“我在这里”
。没有打印任何其他内容。代码永远不会到达“你的档案完了!"
或下一个日志语句。我在控制器脚本中也使用了finalSendFiles
。这是否意味着我正在使用的python文件有问题?可能我没有正确处理那里的内容?@jeff ridgeway-如果我自己不能运行代码,我无法确定,但它似乎指出了get\u的问题sername()
拒绝或使用您的python程序,这显然不会导致错误或退出。如果您在python程序中添加了一些日志,您能验证它是否正在运行吗?我在python程序中添加了一些日志,但它根本没有运行。我想我的python程序甚至正在运行。可能是由于get\u username()造成的
?@jeff ridgeway-当你调用finalSendfiles()
时,你是否有一个.catch()
处理程序,如我所示?如果没有,你需要一个来查看错误。是的,当我调用finalSendfiles()
时,我有catch()
处理程序。我不知道它是否有帮助,但get\u username
是一个异步函数