首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MUD Telnet游戏

MUD Telnet游戏
EN

Code Review用户
提问于 2016-12-20 20:13:57
回答 1查看 163关注 0票数 1

我是JS的新手,我的日常工作是PHP,所以我决定做一个简单的MUD Telnet游戏来练习我的JS技能。

其想法是使用异步/等待来完成乍一看似乎是同步的Telnet服务器代码。我用"babel-node app.js“运行这段代码。

代码语言:javascript
复制
'use strict';

let Promise = require('bluebird');
let net = Promise.promisifyAll(require('net'));

// Async code ahead...
(async () => {

  // Get me some server.
  let server = net.createServer();

  // On new connection.
  server.on('connection', async (socket) => {

    // Set socket (stream) encoding on utf8.
    socket.setEncoding('utf8');

    // Say hello to the client.
    socket.write('hello\r\n');
    socket.write('waiting for input... ');

    // Await input from client
    let input = await new Promise((resolve, reject) => {
      socket.on('data', resolve);
    }); 

    socket.write('input received: ' + input);
    console.log('input received: ' + input)
  }); 

  await server.listenAsync(1234);
  console.log('server is ready for connections');
})();
EN

回答 1

Code Review用户

回答已采纳

发布于 2016-12-21 21:42:35

除了以下几点之外,我没有发现代码有什么问题:

代码语言:javascript
复制
// Await input from client
let input = await new Promise((resolve, reject) => {
  socket.on('data', resolve);
}); 

根据客户端发送数据的频率,data事件可以多次触发。然而,一个承诺可以被认为是一次性事件发射器.一旦它被解决了,它就会被解决。因此,即使数据事件再次触发,也不会发生任何事情。

这也意味着异步connection事件处理程序没有任何意义,所以这就使大部分代码变成了传统的回调-y节点脚本。

对于“返回”的一次性异步操作(如网络请求、fs操作等),异步/等待是有意义的。不说异步/等待是无用的。对于异步来说,这只是一个糟糕的例子,因为操作需要事件发射器,而不是承诺。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/150421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档