如何将请求承诺结果带到外部范围?

时间:2019-01-31 06:42:10

标签: node.js

如何将请求承诺结果带到外部范围?

我不知道为什么我的机器人回显10而不是100。

enter image description here

这是我试图等待的结果 enter image description here

2 个答案:

答案 0 :(得分:0)

在您的代码中,将rp().then...更改为await rp().then..。 Js是异步的。在运行rp()函数时,它需要一些时间。因此,它下面的代码将在那个时间执行。因此,abc的值永远不会从rp()函数内部更改。

答案 1 :(得分:0)

我建议您多读一些关于JavaScript中的promise和async / await的信息,但要回答您的问题:

您的getAreaWeather()函数是async函数,因此您不需要使用ES6承诺链(.then().catch()),并且您实际上需要在返回任何内容之前,请确保您的rp()诺言得以解决。您当前的函数将abc设置为10,然后在rp()中启动请求,但是它立即返回abc(由于请求尚未完成,它仍等于10)

这只是如何兑现承诺的一个例子;我不知道HTML解析是否存在任何问题。

async function getAreaWeather() {
  var abc = 10;
  var weathers = [];
  var options = {/*what you have in your screenshot*/};

  try {
    // Wait for the rp() promise to resolve
    var $ = await rp(options);

    // Use $ however you want...

    abc = 100;

    return abc;
  } catch (err) {
    console.error(err);
  }

  // You could also return abc here if you want, but be aware it'll still equal 10 if the rp() throws an error
}