【问题标题】:How to define a variable and use it outside the function in Nodejs [duplicate]如何定义变量并在Nodejs中的函数之外使用它[重复]
【发布时间】:2018-12-07 05:56:02
【问题描述】:

您好,我正在尝试使用我从函数中获得的值,并希望在函数之外使用它。 我有一个 python 脚本,它试图使用 node 调用并希望在 node 函数之外使用从 python 脚本返回的值。

下面是我想要做的事情,我希望在函数之外使用 aa 值:

PythonShell.run(PythonfilePath, options, function (err, results) {
      if (err)
      throw err;                            
      let aa = parseInt(results)
});
console.log(aa)

我想将 aa 中的值存储用于其他。

【问题讨论】:

  • 您是否尝试使用var 而不是letlet 语句声明了一个块作用域局部变量,可选择将其初始化为一个值。这意味着 aa 的值仅适用于函数内部。您可以阅读以下内容link
  • @VictorG.S. aa 在匿名函数内部定义。它是该函数的本地函数。使用 var 而不是 let 不会改变这一点。
  • @GuillaumeGeorges 是的,感谢您的更正。用户需要全局初始化一个变量才能在函数外使用。

标签: javascript python node.js nodes node-modules


【解决方案1】:

您的代码中有两个问题。第一个是,您在匿名回调函数中本地定义变量。这样,它将永远不会在该功能代码之外可见。您需要在代码顶部全局声明变量。

但主要问题是:PythonShell.run 是一个异步函数,它在完成时调用它的回调函数。您的 console.log 在调用 PythonShell.run 之后直接执行。它不会等待 shell 完成。

您需要阅读有关异步代码和回调的信息,也许还需要阅读 Promises 以使您的代码运行。

如果没有具体示例说明您希望在完成后运行什么,则无法为您推荐工作代码。

【讨论】:

  • 我同意你的看法,感谢您提供如此详细的描述
【解决方案2】:

如果你调用的函数是同步的,你可以像这样在函数之上声明你的变量:

let aa;

PythonShell.run(PythonfilePath, options, function (err, results) {
  if (err)
  throw err;                            
  aa = parseInt(results);
});
console.log(aa);

如果通常是异步函数,则接受回调的函数。在这种情况下,您无法从外部访问内部变量。 console.log 将在回调完成之前被调用。

如果您需要访问此变量,您必须将需要它的代码放入回调函数中。

【讨论】:

    【解决方案3】:
    let aa =  null;
    
    PythonShell.run(PythonfilePath, options, function (err, results) {
          if (err)
          throw err;                            
          aa = parseInt(results)
    });
    console.log(aa)
    

    你可能想使用 async - await 这个函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 2021-10-28
      • 1970-01-01
      相关资源
      最近更新 更多