【发布时间】:2020-06-11 07:31:26
【问题描述】:
我有一个async 客户端函数,它返回是否使用用户名。我正在使用 socket.io 发送数据包,但我无法找出问题所在。
这是功能(浏览器):
let socket = io();
async function createAccount(username, password){
socket.emit('create account', {username:username, password:password});
let res;
await socket.on('create account return', (data) => {
res = data.failed;
});
return res;
};
这是我的测试脚本,如果用户名有效则记录true,否则记录false:
createAccount('bagel03', '12345').then((val)=>console.log(val));
相反,我总是得到未定义,但如果我将 createAccount 函数中的 return 语句更改为:
return true;
它可以工作并记录true。
我是async await 的新手(这是我的第一个项目),网上没有任何帮助。有什么问题?
编辑: 这是服务器代码(Node.js):
const io = require('socket.io')(server,{ pingTimeout: 4000, pingInterval: 4000 })
io.sockets.on('connect', socket =>{
//account stuff
socket.on('create account', data =>{
if(!isUsernameTaken(data.username)){
id = addAccount(data);
socket.emit('create account return',{failed:false})
}else socket.emit('create account return', {failed:true})
});
});
【问题讨论】:
-
你能把服务器上的代码放上去吗?您在 socket.io 中声明事件的位置?
-
是的,我把它省略了,因为它不太有用,但可以肯定
标签: javascript node.js socket.io async-await es6-promise