var npm = require('npm');
npm.load({ 'save-dev': true }, function (err) {
if (err) console.log(err);
npm.commands.install(['lodash'], function (err, data) {
if (err) return console.error(err)
});
});
调用此函数时:
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;
}
总是返回-1,同时在控制台中显示e.x 3。 我做错了什么?
答案 0 :(得分:1)
chrome.sockets.tcp.create({}, function(createInfo) {});
是一个异步函数,outter sockeId返回将早于内部。所以返回值为-1因为当底部的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);
}
});
答案 1 :(得分:-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;
}