不返回 socketId
not returning a socketId
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;
}
调用此函数时:
console.log(get_socketId("irc.freenode.com", 6667));
总是 returns -1,同时在控制台中显示为 e.x 3。
我做错了什么?
chrome.sockets.tcp.create({}, function(createInfo) {});
是一个异步函数,外部 sockeId return 将比内部更早发生。所以 return 是 -1 因为当底部的 socketId 时甚至没有调用内部函数 returns.
一个可能的解决方案是创建一个异步函数并将 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);
}
});
在全局范围内创建你的变量,这将解决你所有的问题。
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;
}
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;
}
调用此函数时:
console.log(get_socketId("irc.freenode.com", 6667));
总是 returns -1,同时在控制台中显示为 e.x 3。 我做错了什么?
chrome.sockets.tcp.create({}, function(createInfo) {});
是一个异步函数,外部 sockeId return 将比内部更早发生。所以 return 是 -1 因为当底部的 socketId 时甚至没有调用内部函数 returns.
一个可能的解决方案是创建一个异步函数并将 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);
}
});
在全局范围内创建你的变量,这将解决你所有的问题。
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;
}