如何将回调代码转换为Promise格式?
我已手动成功地通过端口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);
回答如下: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.promisify
采用遵循常见错误优先回调样式的函数,即以(err,value)=> ...回调作为最后一个参数,并且返回一个返回promise的版本。