gpt4 book ai didi

javascript - 带有 promise 或异步回调的 Socket.io

转载 作者:搜寻专家 更新时间:2023-10-31 23:31:49 24 4
gpt4 key购买 nike

这可能是一种反模式,但是当使用 socket.io 从客户端向服务器发送数据时,模拟 promise 回调 的最佳方法是什么?

对于某些事件,我非常希望它表现得像一个普通的 get 请求,这样客户端就可以将数据发送到服务器,而服务器可以用响应进行回复,然后解决或拒绝 promise 。

最佳答案

这就是我所做的。我创建了一个发出套接字命令的函数,然后返回一个 promise 。我要注意的是,我还没有对这段代码做很多工作,所以它可能需要一些调整。它还需要 Q for its promises/deferreds .

客户端函数定义:

var EmitPromise = function( socket, command, data ) {

var deferred = Q.defer();

socket.emit(command, data, function( response ) {

if( typeof response === "object" ) {

if( response.success === true ) {

deferred.resolve(response.data);

} else {
if( typeof response.message === "string" ) {
deferred.reject( response.message );
} else {
deferred.reject( "The request was not successful." )
}
}
} else {

deferred.reject( "The response to your request could not be parsed." );
}

});

return deferred.promise.timeout( 30000, "The request took too long to respond." );
}

进行调用的客户端代码:

EmitPromise( socket, "getValue", "username" )
.then(
function( data ) {

console.log(data);
return EmitPromise( socket, "getValue", "anotherValue" );

}, function( message ) {
console.log(message);
}
).then(
//Chain your commands from here
);

服务器端处理程序

此处理程序最重要的部分是第二个参数,此处名为 setValueResult,必须使用包含“成功”键的对象调用,该键包含真值或假值。我决定提供一种方法来拒绝 promise ,以防服务器端出现某种错误。

socket.on( 'getValue', function( valueName, setValueResult ) {

var value = getValue(valueName) //Do something with value here

if( value ) {
setValueResult({
success : success,
data : value
});
} else {
setValueResult({
success : success
message : "Unable to retrieve value"
});
}
}

关于javascript - 带有 promise 或异步回调的 Socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21678213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com