Проблема в том, что вы смешали функции обратного вызова и асинхронного ожидания, которые не будут работать так, как вы ожидаете. У вас есть несколько вариантов здесь
[Не рекомендуется] : выполнить вложенный обратный вызов и при ответе на первый обратный вызов, вызвать второй запрос и т. Д.
[Не рекомендуется] : используйте версию обещания пакета запроса, который называется request-promise
, так как в настоящее время это исключается.
[Не рекомендуется] : преобразование стиля обратного вызова запроса в обещание, основанное на заключении в обещание. Снова request
модуль является устаревшим. См. здесь для получения более подробной информации.
[Рекомендуется] : Используйте некоторые современные дневные пакеты, которые поддерживают обещания из коробки и поддерживаются должным образом. Как got
, axios
et c. Вы можете увидеть список здесь .
Вот как будет выглядеть код, если вы используете, скажем, got
pacakge для выполнения http-вызовов.
var AWS = require("aws-sdk");
AWS.config.region = "us-east-1";
var got = require("got");
const encode = require("nodejs-base64-encode");
var lambda = new AWS.Lambda();
import { Handler, Context, Callback } from "aws-lambda";
import { PayPalLinkDetails } from "../../View/PayPalLinkDetails";
import {
PayPalLinkResponse,
PayPalLinkResponseBody
} from "../../View/PayPalLinkResponseBody";
const PAYPAL_CLIENT = process.env.PayPalClientID;
const PAYPAL_SECRET = process.env.PayPalSecretKEY;
const PAYPAL_OAUTH_API = process.env.PayPalAuthAPI;
const PAYPAL_IDENTITY_API = process.env.PayPalIdentityAPI;
const LinkPayPal: Handler = async (
paypalRequest: PayPalLinkDetails,
context: Context,
callback: Callback
) => {
var userInfo = new PayPalLinkResponse();
var paypalresponse = new PayPalLinkResponseBody();
const basicAuth = encode.encode(
PAYPAL_CLIENT + ":" + PAYPAL_SECRET,
"base64"
);
var options = {
method: "POST",
url: PAYPAL_OAUTH_API,
headers: {
Authorization: "Basic " + basicAuth,
"Content-Type": "application/x-www-form-urlencoded"
},
form: {
grant_type: "authorization_code",
code: paypalRequest.code
}
};
const paypalresponse = await got(options);
var getIdentity = {
method: "get",
url: PAYPAL_IDENTITY_API,
headers: {
Authorization: "Basic " + basicAuth,
"Content-Type": "application/x-www-form-urlencoded"
},
form: {
grant_type: "authorization_code",
code: paypalresponse.access_token
}
};
const userInfo = await got(getIdentity);
return userInfo;
};
export { LinkPayPal };
Возможно, вам придется настроить параметры в соответствии со стилем got
, но вы получите представление.