使用异步/等待返回值获取API意外

时间:2018-04-04 22:08:52

标签: javascript promise fetch

这是功能:

const getUserIP = async () => {
  let response = await fetch('https://jsonip.com/');
  let json = await response.json();

  console.log(json.ip)
  return json.ip;
};

在控制台中,按预期记录IP地址。但是,当我将'IP地址'保存到变量时:

const ip = getUserIP();

然后在控制台中键入ip,值显示为:

Promise { <state>: "fulfilled", <value>: "/* my IP here*/" }

我在YouTube上观看了使用相同逻辑/语法的视频,虽然它们使用的是不同的API,但它确实有用。我搜索过Google和SO,但找不到同样问题的帖子。

我错过了什么?

感谢。

3 个答案:

答案 0 :(得分:3)

Async functions 返回Promises,您需要获得以下值:

getUserIP().then(ip => console.log(ip)).catch(err => console.log(err));

或者,您可以将async声明添加到调用函数getUserIP的主函数中:

async function main() {
    const ip = await getUserIP();
}

答案 1 :(得分:1)

您必须将.then添加到getUserIP(),因为async函数正在返回一个承诺。

getUserIp().then(ip => console.log(ip));

你也可以

(async() => {
    const ip = await getUserIP();
    console.log(ip);
})();

答案 2 :(得分:1)

async函数返回Promise,其解析后的值就是您从中返回的值。要获得ip,您必须使用then

getUserIP().then(ip => {})