js - 分配了 2 个变量,但只有 1 个工作 [重复]

Posted

技术标签:

【中文标题】js - 分配了 2 个变量,但只有 1 个工作 [重复]【英文标题】:js - 2 variables assigned but only 1 working [duplicate] 【发布时间】:2020-05-16 03:45:19 【问题描述】:

我有 2 个变量。一个在.then 中分配,另一个在函数中分配。后来只定义了 1 个。

代码摘录...

let user;
let station;
const app = express();

app.post("/api/user", (req, res) => 
    user = req.body.user; // Breakpoint added here to confirm user set


// Uses serialport module. Called when data received on serial port
function serialPortListener(data) 
    getStation(data) // Retrieves record from database
    .then(s => 
        station = s; // Breakpoint added here to confirm station set
    ...

我在这两种方法上都设置了断点以确认变量已设置。当我稍后尝试访问它们时,只定义了user。我假设这与设置 station 的上下文有关?

station 未分配到其他任何位置。

【问题讨论】:

请同时输入getStation函数。似乎该函数没有返回值,因此它给出了未定义的。 promise getStation() 解决了吗?你检查是否调用了 line station = s? “我设置断点...”包括station = s 以确认它已设置 我昨天遇到了同样的问题;这是因为从异步函数内部设置的 return/ 变量不起作用...This YouTube video 帮助我理解它,查看他的语法并尝试在您的应用程序中实现它。 我认为有人在异步使用某些东西时是同步的。 AKA 你点了一个比萨饼,一旦你点了你就试着吃它。不会发生。 【参考方案1】:

我认为问题出在varlet 的工作方式上。尝试将let 更改为var,它应该可以工作。对于varlet 之间的区别,请阅读this。

编辑:这里的代码是一个工作代码。

let user;
let station = 'ABC';

let getStation = new Promise(function (resolve, reject) 
    setTimeout(() => resolve('XYZ'), 1000);
);

// Uses serialport module. Called when data received on serial port
function serialPortListener(data) 
    getStation
    .then((s) => 
        console.log(station); // station is available with value ABC
        station = s;
        console.log(station); // station has value changed to XYZ
    );


console.log(serialPortListener('data'));

您的代码中的问题在于该行

 getStation(data)

【讨论】:

不,这不是这里的原因 你能提供一个小提琴吗? let station = serialPortListener(xxx).then(s => return s); function serialPortListener(data) return getStation(data) 我认为应该是类似的东西,但我对异步函数的理解还处于起步阶段。看看this video。

以上是关于js - 分配了 2 个变量,但只有 1 个工作 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Keras 模型中有 2 个输出,但只有一个缺少值?

如果线程生成速度过快,Ruby 工作分配会失败

OpenGL 试图渲染 2 个纹理,但只有 1 个?

初学Java——数组

new/delete

new/delete