return 来自函数节点 js ssh2 的值

return value from a function node js ssh2

如何return下面getData函数的值(数据)?

const { Client } = require('ssh2');

const conn = new Client();

function getData() {
    //i tried to assign the data to a variable but failed
    //var rawData = '';

    conn.on('ready', () => {
        conn.exec('pwd', (err,stream)=>{
            if (err) throw err;
            stream.on('data',(data)=>{
                //the console successfully displayed - the current path
                console.log('Output:' + data);
                //if i return the data here the output was undefined
                //return data
            });
            stream.stderr.on('data',(data)=>{
               
            });
            stream.on('close',(code,signal)=>{
                conn.end();
            });
            //if i tried to get the data values here, it threw "unhandled 'error' event", so i would not possible to return the data here.
            //console.log(data);
            
        });
    }).connect({
        host: 'myserver',
        port: 22,
        username: 'root',
        password: 'roots!'
    });
}


getData();

从stream中consol出来是成功的,但是如何return数据呢? 我试图将数据分配给变量 (rawData),但混淆了 'return' 代码的放置位置。

您可以使用承诺来传达最终结果:

function getData() {
    return new Promise((resolve, reject) => {
        let allData = "";
        conn.on('ready', () => {
            conn.exec('pwd', (err, stream) => {
                if (err) {
                    reject(err);
                    conn.end();
                    return;
                }
                stream.on('data', (data) => {
                    allData += data;
                });
                stream.on('close', (code, signal) => {
                    resolve(allData);
                    conn.end();
                });
                stream.on('error', reject);
            });
        }).connect({
            host: 'myserver',
            port: 22,
            username: 'root',
            password: 'roots!'
        });
    });
}


getData().then(result => {
    console.log(result);
}).catch(err => {
    console.log(err);
});;