【发布时间】:2026-01-17 22:00:02
【问题描述】:
我正在尝试从 API 获取公共 IP 地址,然后将该 IP 用于另一个函数 (ninjaUniqueVisitorRequest())。
我有以下代码:
function ninjaGetIp() {
var ipRequest = new XMLHttpRequest();
ipRequest.open('GET', "https://api.ipify.org?format=jsonp=", true);
ipRequest.send();
ipRequest.onload = function () {
if (ipRequest.status >= 200 && ipRequest.status < 400) { // If response is all good...
return ipRequest.responseText;
} else {
console.log('There was an error retrieving the public IP.');
return '127.0.0.1';
}
}
}
async function ninjaUniqueVisitorRequest() {
// var ninjaSiteUuid = ninjaGetSiteUuid();
// var ninjaFingerprint = await ninjaGetFingerprint();
var ninjaPublicIp = await ninjaGetIp();
console.log(ninjaPublicIp);
}
目前,当我运行 ninjaUniqueVisitorRequest(); 时,console.log(ninjaPublicIp); 返回 undefined。
我有点理解它会在发出请求之前立即返回,但这就是我认为我使用async/await 修复的问题。
感谢任何想法! PHP的家伙在这里,放轻松。
【问题讨论】:
-
你的
ninjaGetIp()函数不是async并且不返回 Promise。 -
我以为你只是把
async放在你调用的函数上。同样据我了解return xyz无论如何都会转换为承诺?我正在用 Babel 编译。 -
如果你想要基于承诺的 AJAX 使用 fetch() API。
-
@KriiV 如果你有 any
return并且你用async标记它,它将被转换为一个承诺。ninjaGetIp不返回任何内容。