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】:
我认为问题出在var
和let
的工作方式上。尝试将let
更改为var
,它应该可以工作。对于var
和let
之间的区别,请阅读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 个工作 [重复]的主要内容,如果未能解决你的问题,请参考以下文章