gpt4 book ai didi

javascript - 如何在JavaScript函数之外访问局部变量?

转载 作者:行者123 更新时间:2023-12-02 22:11:17 25 4
gpt4 key购买 nike

几个小时以来我一直在尝试访问函数外部的局部变量。我不知道我的错误在哪里。代码如下:

编辑后的代码:

  if (lastMsg.toUpperCase().indexOf("@TEST") > -1) { 
var myPythonScriptPath = 'my_script.py';
var myMessage = '';

// Use python shell
const {PythonShell} = require("python-shell");
var pyshell = new PythonShell(myPythonScriptPath);

pyshell.on('message', function (message) {
// received a message sent from the Python script (a simple "print" statement)
console.log(message);
myMessage = message;
});

// end the input stream and allow the process to exit
pyshell.end(function (err) {
if (err){
throw err;
};

});
sendText = `${myMessage};`

因此,变量 ${message} 为“未定义”。该代码本身可以工作,但在 if 内声明我看不到消息的输出。如何解决这个问题?

最佳答案

显然,在从监听器 pyshell 接收消息之前,正在执行 sendText = `${myMessage}`;

pyshell.on('message', function (message) {
console.log(message);
//decide here what you want to do with the message
});

看看 MDN docs了解异步代码的行为方式。

更新:

诀窍在于等待直到收到消息然后返回它,一个简单的解决方案是将逻辑包装在异步函数中,并在收到消息后触发回调。

const { PythonShell } = require("python-shell");
var pyshell = new PythonShell(myPythonScriptPath);

function getShellMessage(callback) {
pyshell.on('message', function (message) {
console.log(message);
// end listener here pyshell.end() ?
callback(null, message);
});

// end the input stream and allow the process to exit
pyshell.end(function (err) {
if (err){
callback(err);
};

});
}


// the callback function will only get triggered upon receiving the message
getShellMessage(function(err, message) {
//message is ready
console.log(message)
});

关于javascript - 如何在JavaScript函数之外访问局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59550036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com