在执行下一个在 NodeJS 中使用该数据的函数之前完成 readln 函数
Make a readln function finish before executing next function that uses that data in NodeJS
请帮忙解决这个问题。我想创建一个使用控制台输入(两个间隔整数的输入行)创建 nx2 矩阵的函数。问题是当我想从另一个函数使用这些数据时,我的数据似乎是未定义的。例如,printmatrix 函数调用 readfunction 但结果为 undefined,因为 readfunc 似乎尚未读取所有击键,并且 printmatrix 函数已在没有输入数据的情况下执行。在执行打印功能或任何其他需要数据准备好读取的功能之前,我如何确保需要用户输入的功能完成?感谢您的帮助。
const readline = require('readline');
const readfunc = () =>{
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let arr=[];
let mat=[];
rl.on('line', (input) => {
let splitAns=input.split(" ");
arr.push(splitAns[0])
arr.push(splitAns[1])
mat.push(arr)
arr=[];
});
rl.on('close', () =>{
return (mat)
})
}
const printmatrix = () =>{
const result = readfunc();
console.log(result);
}
printmatrix(); // prints undefined :(
我没有测试代码,但进行了快速代码审查,我认为您错过了结果,因为您没有等待它。由于 printmatrix 中的两行是异步执行的,因此 readfunc 没有时间完成将数据收集到 'mat' 变量中。
我的建议是 return 来自 readsfunc() 方法的 Promise 并在将其打印到控制台之前等待响应。
因此 printmatrix 将如下所示:
readfunc().then((data) => console.log(data));
有关 Promises 的更多信息 -> https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Promise
本文中的一个示例:
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('foo');
}, 300);
});
myPromise
.then(handleResolvedA => console.log(handleResolvedA)
将在 300 毫秒后打印 'foo'
请帮忙解决这个问题。我想创建一个使用控制台输入(两个间隔整数的输入行)创建 nx2 矩阵的函数。问题是当我想从另一个函数使用这些数据时,我的数据似乎是未定义的。例如,printmatrix 函数调用 readfunction 但结果为 undefined,因为 readfunc 似乎尚未读取所有击键,并且 printmatrix 函数已在没有输入数据的情况下执行。在执行打印功能或任何其他需要数据准备好读取的功能之前,我如何确保需要用户输入的功能完成?感谢您的帮助。
const readline = require('readline');
const readfunc = () =>{
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let arr=[];
let mat=[];
rl.on('line', (input) => {
let splitAns=input.split(" ");
arr.push(splitAns[0])
arr.push(splitAns[1])
mat.push(arr)
arr=[];
});
rl.on('close', () =>{
return (mat)
})
}
const printmatrix = () =>{
const result = readfunc();
console.log(result);
}
printmatrix(); // prints undefined :(
我没有测试代码,但进行了快速代码审查,我认为您错过了结果,因为您没有等待它。由于 printmatrix 中的两行是异步执行的,因此 readfunc 没有时间完成将数据收集到 'mat' 变量中。
我的建议是 return 来自 readsfunc() 方法的 Promise 并在将其打印到控制台之前等待响应。
因此 printmatrix 将如下所示:
readfunc().then((data) => console.log(data));
有关 Promises 的更多信息 -> https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Promise
本文中的一个示例:
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('foo');
}, 300);
});
myPromise
.then(handleResolvedA => console.log(handleResolvedA)
将在 300 毫秒后打印 'foo'