Socket.io 如何使用套接字数据返回Response.ok?

Socket.io 如何使用套接字数据返回Response.ok?,socket.io,dart,aqueduct,Socket.io,Dart,Aqueduct,我可以将我的导水管连接到关闭网络套接字(侦听器并获取数据)问题是我无法返回新的响应。ok。它显示空 我使用的是导水管3.0。大多数文档看起来像是片段。我很难使用省道插座。但现在我可以从套接字中获取文本,并且我不能从我的AqueductWebAPI通过互联网发送数据 class LoginController extends Controller { String _xCustomerToken; String _xCustomerName; var list = []; @override F

我可以将我的导水管连接到关闭网络套接字(侦听器并获取数据)问题是我无法返回新的响应。ok。它显示空

我使用的是导水管3.0。大多数文档看起来像是片段。我很难使用省道插座。但现在我可以从套接字中获取文本,并且我不能从我的AqueductWebAPI通过互联网发送数据

class LoginController extends Controller {
String _xCustomerToken;
String _xCustomerName;
var list = [];

@override
Future handle(Request request) async {
String reply;
Socket.connect('192.168.1.22’, 1024).then((socket) async {
socket.listen((data) async {
reply = await new String.fromCharCodes(data).trim();
print("reply: $reply");

    var list = reply.split(":_:");
    print(list);
    _xCustomerToken = list[2];
    _xCustomerName = list[3];

    // CAN PRINT THE SOCKET DATA
    // EXAMPLE: ”Customer Token: 998877, CustomerName: NIYAZI TOROS”
    print(
        "Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");

    await new Future.delayed(new Duration(seconds: 2));
  }, onDone: () {
    print("Done");
  });
  socket.write('Q101:_:49785:_:x\r\n');
});

// CANT RETURN THE SOCKET DATA
return new Response.ok(
 // EXAMPLE: "Customer Token: null, CustomerName: null”
    "Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
}
}
更新: 我把return语句放在wait for(listen)中,现在只要我输入,就可以正确地获得信息

class LoginController extends Controller {
  String _xCustomerToken;
  String _xCustomerName;
  String _xResult;
  var list = [];

  @override
  Future<RequestOrResponse> handle(Request request) async {
    String reply;

    var socket = await Socket.connect('192.168.1.22', 1024);
    socket.write('Q101:_:49785:_:x\r\n');

    await for (var data in socket) {
      reply = await new String.fromCharCodes(data).trim();
      var list = reply.split(":_:");
      _xCustomerToken = list[2];
      _xCustomerName = list[3];
      _xResult = "$_xCustomerToken:_:$_xCustomerName";
      print("$_xResult");
      return new Response.ok("$_xResult");
    }
    return new Response.ok("No data");
  }
}
类登录控制器扩展控制器{
字符串xCustomerToken;
字符串xCustomerName;
字符串xResult;
var列表=[];
@凌驾
未来句柄(请求)异步{
字符串回复;
var socket=await socket.connect('192.168.1.22',1024);
socket.write('Q101::49785::x\r\n');
等待(套接字中的var数据){
reply=等待新字符串.fromCharCodes(data).trim();
var list=reply.split(“:\”);
_xCustomerToken=列表[2];
_xCustomerName=列表[3];
_xResult=“$\u xCustomerToken:$\u xCustomerName”;
打印($xResult);
返回新的响应。确定($xResult);
}
返回新的响应。正常(“无数据”);
}
}
The
.listen()
不会等待完成以执行其余的代码,然后点击
返回新的响应。确定(“客户令牌:$\u xCustomerToken,CustomerName:$\u xCustomerName”)带空值的右波纹管。您可以尝试改用wait for:

class LoginController extends Controller {
    String _xCustomerToken;
    String _xCustomerName;
    var list = [];

    @override
    Future handle(Request request) async {
        String reply;

        var socket = await Socket.connect('192.168.1.22’, 1024);
        socket.write('Q101:_:49785:_:x\r\n');

        await for (var data in socket) {
            reply = await new String.fromCharCodes(data).trim();
            print("reply: $reply");

            var list = reply.split(":_:");
            print(list);

            _xCustomerToken = list[2];
            _xCustomerName = list[3];

            // CAN PRINT THE SOCKET DATA
            // EXAMPLE: ”Customer Token: 998877, CustomerName: NIYAZI TOROS”
            print("Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");

            await new Future.delayed(new Duration(seconds: 2));
        }

        return new Response.ok("Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
    }
}

谢谢Leo,我修改并更新了我的代码。如果我把return语句放在里面,等待它工作。