使用来自 aysnc Javascript http 请求的数据? (aws 无服务器)

Using data from an aysnc Javascript http request? (aws serverless)

我正在使用 nodejs 无服务器模块创建 lambda aws 函数。

'use strict';
const request = require('request');
const options = {
  url: 'https://api.mysportsfeeds.com/v2.0/pull/nfl/2018-regular/games.json',
  method: 'GET',
  headers: {
    "Authorization": "Basic " + Buffer.from("1da103" 
+ ":" + "MYSPORTSFEEDS").toString('base64')
  }
}

//this is automatically called by aws
module.exports.hello = async (event, context) => {
  let result;
  request.get(options, (error, response, body) => {
    result = JSON.parse(body).lastUpdatedOn; //never happens cuz of async
  });
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Go Serverless v1.0! Your function executed successfully!',
      input: result,
    }),
  };
};

我遇到的问题是我无法从 get 请求中 return 输出,因为对结果变量的赋值(在异步 get 请求中)发生在 return 之后陈述。我不认为我可以将外部函数变成 get 请求的回调函数。我该如何解决这个问题?

另一种方法是提取请求逻辑并将其放入新函数中。

记住,你需要捕捉任何错误,所以使用 try-catch 块来做到这一点。

'use strict';
const request = require('request');
const options = {
    url: 'https://api.mysportsfeeds.com/v2.0/pull/nfl/2018-regular/games.json',
    method: 'GET',
    headers: {
        "Authorization": "Basic " + Buffer.from("1da103"
            + ":" + "MYSPORTSFEEDS").toString('base64')
    }
};

function getResult() {
    return new Promise(function (resolve, reject) {
        request.get(options, (error, response, body) => {
            if (error) return reject(error);
            resolve(JSON.parse(body).lastUpdatedOn); //never happens cuz of async
        });
    });
}

//this is automatically called by aws
module.exports.hello = async (event, context) => {
    let result = await getResult();
    return {
        statusCode: 200,
        body: JSON.stringify({
            message: 'Go Serverless v1.0! Your function executed successfully!',
            input: result,
        }),
    };
};