为什么等待函数返回未决的承诺

pgu*_*rio 5 node.js async-await

let request = require('request-promise')

function get(url) {
  let _opt = {}
  let response = (async () => {
    try {
      var ret = await request(url, _opt);
      return ret;
    } catch (e) {
      console.log(e)
    }
  })();
  return response
}

console.log(get('http://www.httpbin.org/ip'))
Run Code Online (Sandbox Code Playgroud)

得到:

Promise { <pending> }
Run Code Online (Sandbox Code Playgroud)

为什么不等待我的回复?

Hos*_*sar 4

为什么不等我的回复?


这很简单,因为您正在返回一个承诺。Node js 是单线程的,并且以非阻塞的方式执行。
这意味着get函数中的返回响应是在响应变量解析之前执行的。 尝试如下:

let request = require('request-promise')

function get(url) {
    let _opt = {}
    return request(url, _opt);
}

async function some () {
    console.log(await get('http://www.httpbin.org/ip'));
}

some();
Run Code Online (Sandbox Code Playgroud)

此示例也返回一个承诺,但在本例中我们正在等待承诺解析。

希望这有帮助。

  • @pguardiario 这是不可能的。我强烈建议您首先从回调开始,学习如何构建异步执行的代码,然后再深入研究异步/等待等更复杂的事情。 (3认同)