Как преобразовать код обратного вызова в формат обещания? - PullRequest
0 голосов
/ 08 октября 2019

Я успешно могу подключиться к linux345 через порт 2345. Это означает, что следующий код должен отображать вывод как 0

Однако вывод кода возвращает 1. Похоже, что преобразование формата callback в async promise поможет решить проблему. Пожалуйста, предложите, как будет выглядеть обновленный код.

const net = require('net');

const HOST = 'linux345';
const PORT = 2345;
let ErrCode = 1;

const client = new net.Socket();

client.connect(PORT, HOST, function() {
    ErrCode = 0;
});

client.on('data', function(data) {    
    console.log('Client received: ' + data);
     if (data.toString().endsWith('exit')) {
       client.destroy();
    }
});

client.on('close', function() {
});

client.on('error', function(err) {
    ErrCode = err.code;
    console.log(ErrCode);
});

console.log(ErrCode);

1 Ответ

0 голосов
/ 08 октября 2019
let ErrCode = 1;

const client = new net.Socket();

const connect = util.promisify(client.connect);

async function testFun() {
    try {
        let data = await connect(PORT, HOST);
        ErrCode = 0;
        console.log('Client received: ' + data);
        if (data.toString().endsWith('exit')) {
            client.destroy();
        }
    }
    catch (ex) {
        ErrCode = -1;
    }
}

testFun().then(() => {
    console.log(ErrCode)
}
)

использует util. обратный вызов в качестве последнего аргумента и возвращает версию, которая возвращает обещания.

...