我正在寫一個Chrome擴展與socket api(雖然這個文檔是過時的,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.write
和socket.read
是異步的,我不得不窩回調,以確保下一個請求被髮送後,先前的請求得到了正確的響應。
管理這些嵌套函數真的很難,我該如何改進它?
UPDATE
我想有一個方法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
});
http://stackoverflow.com/questions/8302218/chrome-tabs-create-function-wrapper-why-doesn-this-work –
@ GRIGORE-TURBODISEL你可能認真嗎? – wong2
Yea man,com'on。這就是我從'//在這裏阻塞直到上一次發送得到響應'所得到的結果。 –