如何比较 Javascript 中两个 promise 产生的值?

How to compare the value resulting from two promises in Javascript?

async function getDNShomeIP(){
    var response = await fetch('https://dns.google/resolve?name=example.com'); // this uses the google api
    var json = await response.json();
    var homeIPadress = json.Answer[0].data;
    console.log(homeIPadress);
    return homeIPadress;
};

async function getCurrentIP(){
  var response = await fetch("https://api.ipify.org?format=json");
  var json = await response.json()
  var currentIPadress = json.ip;
  return currentIPadress;
}

var homeIPadress = getDNShomeIP();
var currentIPadress = getCurrentIP();

if (homeIPadress == currentIPadress){
  alert("from same from lol");
} else {
  alert("not from same")  
};

你好,

我想知道如何比较 Javascript 中两个承诺的值。 我不知道如何让程序在 if 语句之前等待。 如果承诺尚未实现,则该语句的计算结果为 false,因此程序遵循 else 分支。

谢谢

您可以将其包装在另一个异步函数中:

async function execute() {
  var homeIPadress = await getDNShomeIP();
  var currentIPadress = await getCurrentIP();

  if (homeIPadress == currentIPadress){
    alert("from same from lol");
  } else {
    alert("not from same");
  }
}

execute();

在另一个 "async" 函数中使用 "await" 关键字,以便该函数在继续执行之前等待响应。

async function testEquality() {
  var homeIPadress = await getDNShomeIP();
  var currentIPadress = await getCurrentIP();

  if (homeIPadress === currentIPadress) {
    alert("from same from lol");
  } else {
    alert("not from same")
  };
}

testEquality();

我还建议您使用三重相等 (===) 来比较结果,因为这使用严格相等比较。

首先你需要修复你的 fetch 函数,然后修复 async await 函数
你必须像这样把你的 await 函数放在 async 函数上, 像下面的代码一样修复你的 getdnshomeip

function getCurrentIP(){
   return fetch("https://api.ipify.org?format=json")
    .then( r => r.json())
    .then( r => r);
}

const check = async () => {
   var currentIPadress = await getCurrentIP();
   var homeIPadress = await getDNShomeIP();

   if (homeIPadress === currentIPadress){
      alert("from same from lol");
   } else {
      alert("not from same")
   };

}

check();

你描述的是我创建的函数

async function getDNShomeIP(){
    var response = await fetch('https://dns.google/resolve?name=example.com');
    var json = await response.json();
    var homeIPadress = json.Answer[0].data;
    console.log(homeIPadress);
    return homeIPadress;
};

async function getCurrentIP(){
  var response = await fetch("https://api.ipify.org?format=json");
  var json = await response.json()
  var currentIPadress = json.ip;
  console.log(currentIPadress);
  return currentIPadress;
}

const { eq } = rubico

eq(getDNShomeIP, getCurrentIP)().then(console.log)
<script src="https://unpkg.com/rubico/index.js"></script>

eq

的文档