Kri*_*iiV 5 javascript async-await
我正在尝试从 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);
}
Run Code Online (Sandbox Code Playgroud)
目前,当我运行ninjaUniqueVisitorRequest();的console.log(ninjaPublicIp);回报undefined。
我有点理解它在发出请求之前立即返回,但这就是我认为我正在通过使用async/await.
任何想法表示赞赏!PHP 家伙在这里,放轻松。
目前你ninjaGetIp不是一个 awaitable Promise。
您可以尝试仅返回一个Promise包装实现的 new或仅async在函数之前添加关键字。
function ninjaGetIp() {
return new Promise(function (resolve, reject) {
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 resolve(ipRequest.responseText);
} else {
console.log('There was an error retrieving the public IP.');
return resolve('127.0.0.1');
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
异步示例
async 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';
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2804 次 |
| 最近记录: |