在执行下一个在 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'