我从另一个提取本地IP地址的答案中获得以下功能。我输出本地IP两次,一次在函数中,我也尝试输出调用函数的值:
function getLocalIP () {
window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection
var pc = new RTCPeerConnection({iceServers: []})
var noop = function () {}
var localIP
pc.createDataChannel('')
pc.createOffer(pc.setLocalDescription.bind(pc), noop)
pc.onicecandidate = function (ice) {
if (!ice || !ice.candidate || !ice.candidate.candidate) return
localIP = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(ice.candidate.candidate)[1]
console.log(localIP)
}
return localIP
}
console.log(getLocalIP())
输出:
undefined
192.168.0.1
我大多数人都明白为什么会这样。 JavaScript是异步的,因此getLocalIP
在未定义时返回值。
我如何使用它来获得我期望从同步背景中获得的行为?我来自Python背景,我希望上面的代码返回已定义的变量。