gpt4 book ai didi

javascript - 我如何用太多的嵌套函数优化这段代码?

转载 作者:行者123 更新时间:2023-11-30 05:57:52 26 4
gpt4 key购买 nike

我正在使用 socket api 编写一个 Chrome 扩展程序(虽然这个文档已经过时了,最新版本的 api 是 here ),我发现代码真的很难组织:

所有方法都在命名空间 chrome.experimental.socket 下,为简单起见,我将在下面使用 socket

socket.create("tcp", {}, function(socketInfo){
var socketId = socketInfo.socketId;

socket.connect(socketId, IP, PORT, function(result){
if(!result) throw "Connect Error";

socket.write(socketId, data, function(writeInfo){
if(writeInfo.bytesWritten < 0) throw "Send Data Error";

socket.read(socketId, function(readInfo){
if(readInfo.resultCode < 0) throw "Read Error";
var data = readInfo.data; // play with the data
// then send the next request
socket.write(socketId, data, function(writeInfo){
socket.read(socketId, function(readInfo){
// ............
});
});
});
})
});
})

因为 socket.writesocket.read 都是异步的,我必须嵌套回调以确保在上一个请求获得正确 react 。

管理这些嵌套函数真的很难,我该如何改进它?

更新

我想要一个方法send,我可以将其用作:

send(socketId, data, function(response){
// play with response
});
// block here until the previous send get the response
send(socketId, data, function(response){
// play with response
});

最佳答案

这个(类似的东西)怎么样?

var MySocket = {
obj: null,
data: null,
start: function() { ... some code initializing obj data, ending with this.create() call },
create: function() { ... some code initializing obj data, ending with this.connect() call },
connect: function() { ... some connection code, ending with this.write() call },
write: function() { ... some writing code that updates this.data, ending with this.read() call },
read: function() { ... you probably get the idea at this point )) ... },
};

此对象可以与 MySocket.start() 或其他东西一起使用。这个想法是将所有数据(和嵌套调用)封装在单个(但更多或更少的全局可用)对象中。

或者甚至更多,可以创建两个对象:一个纯粹用于写入目的,另一个纯粹用于读取,每个都使用自己的 data 操作,然后包装它们(以及它们的内部调用,所以说)到单个 SocketManager 对象中。

关于javascript - 我如何用太多的嵌套函数优化这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10687041/

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