2016-02-29 61 views
0
function get_socketId(host,port) { 
     var socketId = -1; 

     chrome.sockets.tcp.create({}, function(createInfo) { 
      chrome.sockets.tcp.connect(createInfo.socketId, host, port, function(result) { 
       if(result >= 0){ 
        socketId = createInfo.socketId; 
        console.log(socketId); 
        return socketId; 
       } 
      }); 
    }); 
    return socketId; 
} 

當這個函數被調用:不返回socketId

console.log(get_socketId("irc.freenode.com", 6667)); 

總是返回-1,同時顯示在控制檯e.x 3。 我做錯了什麼?

+0

的[我如何返回從一個異步調用的響應?(可能的複製http://stackoverflow.com/questions/14220321/how-do-i-return-the - 從一個異步調用) – Xan

回答

1
chrome.sockets.tcp.create({}, function(createInfo) {}); 

是一個異步函數outter sockeId返回會在內部先發生。所以返回值是-1 cuz,當底部的socketId返回時,甚至不會調用內部函數。

一個可能的解決方案是創建一個異步函數並傳遞socketId變量回調:

function get_socketId(host,port, callback) { 
    var socketId = -1; 

    chrome.sockets.tcp.create({}, function(createInfo) { 
     chrome.sockets.tcp.connect(createInfo.socketId, host, port, function(result) { 
      if(result >= 0){ 
       socketId = createInfo.socketId; 
       console.log(socketId); 
       callback(null, socketId); //we pass no error and the socketId to our callback function 
      } else { 
       callback('no result', null); //we pass an error 
      } 
     }); 
}); 
}; 
//call the function here 
    get_socketId("irc.freenode.com", 6667, function (err, socketId){ 
    if (err){ 
     console.error(err); 
    } else { //if no error were passed 
     console.log(socketId); 
    }  
}); 
+0

新問題現在...我用angularJS它,如果我設置了一些東西在「console.log(socketId);」當沒有錯誤時,html不會改變。 – JoeBoy

+0

不看代碼很難說出什麼問題。您應該使用其中的新代碼創建另一個問題。 – kailniris

-1

使在全球範圍內的變量,將停止所有的問題。

var socketId; 
 

 
function get_socketId(host,port) { 
 
     socketId = -1; 
 
     chrome.sockets.tcp.create({}, function(createInfo) { 
 
      chrome.sockets.tcp.connect(createInfo.socketId, host, port, function(result) { 
 
       if(result >= 0){ 
 
        socketId = createInfo.socketId; 
 
        console.log(socketId); 
 
       } 
 
      }); 
 
    }); 
 
    return socketId; 
 
}