答案 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
}