javascript - 使用 Node.js 函数中的数据

标签 javascript node.js function asynchronous express

我正在学习使用 NodeJS,但遇到了问题。 getCurrentWeather() 是异步函数,当我启动应用程序时,它会立即加载,并将数据写入变量。当我在函数外部使用这些变量来处理 console.log() 数据时,我得到未定义的结果,因为 Node 不会等到 getCurrentWeather() 获取 API 数据,它只是立即执行代码,而它仍然没有任何返回值。 我用另一个函数 renewCurrentWeather() 解决了这个问题,并添加了 setTimeout 来等待 getCurrentWeather() 获取数据,然后才控制台。 log() 它。

这种方法对我有用,但问题是如果我想多次使用这些数据,我必须使用带有setTimeout的函数。在我看来,这有点问题,因为我需要在更复杂的情况下使用这些数据。

所以我的问题是,当 getCurrentWeather() 完全完成从 API 加载数据时,如何让 Node.JS 执行 console.log(temp, cond) 。换句话说,我只想在应用程序中的任何地方使用变量 tempcond,而不附加任何函数。

// Get weather data from Weather Underground every 3 minutes (due to daily 500 calls per day limit)

function getCurrentWeather() {
wunder.conditions('', function (err, data) {
 if (err) throw err;
 temp = data.temp_c;
 cond = data.weather;
});
};

getCurrentWeather();
setInterval(getCurrentWeather, 180000);

// Use data recieved from API as much times as I need
function renewCurrentWeather() {
  setTimeout(function() {
  console.log(temp + " " + cond);
}, 1000);
};

最佳答案

您可以通过将 console.log 放入回调函数中来使用这些值。回调函数按顺序工作,因此 console.log 将在值更新后执行。

function getCurrentWeather() {
    wunder.conditions('', function (err, data) {
     if (err) throw err;
     temp = data.temp_c;
     cond = data.weather;
    });
    console.log(temp + " " + cond);
};

setInterval(getCurrentWeather, 180000);

关于javascript - 使用 Node.js 函数中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31049312/

相关文章:

javascript - 如何使用reactjs生成nodejs Express应用程序

mySQL 函数制作地址字符串

javascript - 基本计算器因为 JS 而无法工作?

javascript - 在 end_request 处理程序期间回发后无法从 asp gridview 检索数据

javascript - 函数内的单个函数不会触发,而其他函数会触发

javascript - 如果数字:true is set in localeCompare function会有什么变化吗

javascript - onkeyup(函数)未注册

javascript - 将带有毫秒的unix时间戳转换为postgres可读的timestamptz

node.js - 如何使用 fetch API 解析 json 响应

javascript - n 模块中断 npm