Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么从未调用过Spawn()?_Javascript_Node.js_Express_Promise_Spawn - Fatal编程技术网

Javascript 为什么从未调用过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

我对node.js和express有一些经验已经有相当一段时间了,但我在代码中一直遇到这个bug。在我的服务文件中,我在代码中已解析的承诺内调用spawn()。不知何故,我的spawn代码从未被调用(或者如果被调用,
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
    是一个异步函数