谁能建议一下:
我已经写了一个客户端网页,其中有一个Websocket连接到服务器端节点应用程序。 一切正常。
当某个消息通过websocket从客户端发送时,我让服务器响应(同样通过websocket连接)一些文本,当接收到reposnse时,我在客户端显示这些文本。 一切正常。
现在,如果我想使服务器上的函数为异步函数,它在返回字符串之前等待4秒,该怎么办。 我无法使其工作,字符串返回为“[object Promise]”。
因此,服务器上的原始同步代码(在reposnse中执行到客户端调用并且正在工作)是:
Chatterer.prototype.HandleASCIIMessage = function(szMessage, ws)
{
ws.send("BANG");
}
现在我将其替换为:
Chatterer.prototype.HandleASCIIMessage = function (szMessage, ws)
{
var sz = this.Test();
ws.send(sz);
}
其中测试为:
Chatterer.prototype.Test = function()
{
return this.ShowResult();
}
代码的其余部分是:
Chatterer.prototype.ShowResult = async function ()
{
var result = await this.GetAsync();
return result;
}
Chatterer.prototype.GetAsync = async function ()
{
var result = await this.AsyncFunc();
return result;
}
Chatterer.prototype.AsyncFunc = async function ()
{
return new Promise(resolve => {
setTimeout(() => {
resolve("BANG");
}, 4000);
});
}
我试图在4秒后才调用ws.send(sz)行。
谢谢,米奇。
Chatterer.prototype.ShowResult = async function ()
{
var result = await this.GetAsync();
return result;
}
上面的函数返回一个promise(异步函数返回一个promise)。 这意味着下面的代码也返回一个承诺:
Chatterer.prototype.Test = function()
{
return this.ShowResult();
}
您也可以使用上面的async
来使其更加明显,但在技术上并不需要这样做。
这意味着在这里:
Chatterer.prototype.HandleASCIIMessage = function (szMessage, ws)
{
var sz = this.Test();
ws.send(sz);
}
sz
是一个承诺,因此要么使handleasciimessage
async
和var sz=await this.test();
,要么使用普通的promise
API和this.test()。then(sz=>ws.send(sz))
。