ソケット APIを使用して Chrome 拡張機能を作成しています(ただし、このドキュメントは古くなっていますが、API の最新バージョンはこちらにあります)。コードを整理するのは非常に難しいことがわかりました。
すべてのメソッドは名前空間の下にあります。簡単にするために以下を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.write
とは両方ともsocket.read
非同期であるため、コールバックをネストして、前の要求が正しい応答を取得した後に次の要求が送信されるようにする必要があります。
これらのネストされた関数を管理するのは本当に難しいです。どうすれば改善できますか?
アップデート
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
});