首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想在lambda函数内部异步调用外部API (天气API

我想在lambda函数内部异步调用外部API (天气API
EN

Stack Overflow用户
提问于 2019-07-26 20:33:29
回答 1查看 462关注 0票数 0

我正在尝试使用openweathermap.org的外部API来获取天气预报,并且想使用node.js,到目前为止,我可以在不使用API KEY的情况下获得单个城市的天气预报,并尝试通过API Key获取多个城市的天气预报,因为我找不到使用api key的正确方法。

下面是我正在尝试做的事情的清晰图景:

代码语言:javascript
复制
const http = require("http");

module.exports.getWeather = async event => {

    const url = "http://api.openweathermap.org/data/2.5/weather?q=${process.env.cityName},${process.env.countryCode}&APPID=${process.env.secretKey}";

    console.log(url);

    const req =await http.request(url, (res) => {

        let body = '';
        console.log('Status:', res.statusCode);
        console.log('Headers:', JSON.stringify(res.headers));

      res.on('data', (d) => {
        body += d;
      });
      res.on('end', () => {
        let data = JSON.parse(body);
        console.log('daily weather', data.daily);
      });
    });
    req.on('error',(e) => {
      console.error("erreur");
    });
    req.end();
};
EN

回答 1

Stack Overflow用户

发布于 2019-07-26 21:00:06

仅当在promises上调用时,await才有效。http.request使用回调方法,因此await永远不会工作。

你必须缩短这个回调,这样你才能在它上执行await

Node.js在util模块中有一个名为promisify的内置实用程序方法,您可以使用它。

代码语言:javascript
复制
const http = require("http");
const util = require("util")
util.promisify(http.request)
module.exports.getWeather = async event => {
    const url = `http://api.openweathermap.org/data/2.5/weather?q=${process.env.cityName},${process.env.countryCode}&APPID=${process.env.secretKey}`;
    const response = await http.request(url)
    console.log(response)
};

简单多了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57220176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档