Как я могу загрузить данные в корзину S3 из функции Twilio? - PullRequest
1 голос
/ 16 февраля 2020

Я написал следующую функцию Twilio для загрузки данных в корзину S3.

Однако на S3 данные вообще не попадают.

Что не так?

exports.handler = function(context, event, callback) {
    callback(null,
        putFile(
            getParams(context, event)
        )
    );
};

function getParams(context, event) {
    return {
        Bucket: 'my-bucket',
        Key: 'my-file.json',
        Body: JSON.stringify(event),
        ContentType: 'application/json'
    };
}

function putFile(params) {
    var aws = require('aws-sdk');
    var s3 = new aws.S3();

    s3.putObject(params, (err, res) => {
        if (err) console.log(`s3-err: ${err}`);
        if (res) console.log(`s3-res: ${JSON.stringify(res)}`);
    });
}

1 Ответ

2 голосов
/ 17 февраля 2020

Ответ на мой вопрос здесь: https://www.twilio.com/docs/runtime/functions/invocation#callback -и-асинхронные-ограничения

Обратный вызов и асинхронные ограничения

Важно отметить что когда вызывается функция обратного вызова, она прекращает все выполнение вашей функции. Это включает в себя любые асинхронные процессы, которые вы могли запустить во время выполнения вашего обработчика.

По этой причине, если вы используете библиотеки, которые изначально являются асинхронными, вам нужно вложить свой вызов в функцию обратного вызова внутри обработчик обещания.

Таким образом, в основном, callback(); необходимо поместить в успешный ответ запроса к S3.

Мне не удалось сделать это в приведенном выше фрагменте кода, так как я просто зарегистрировал ответ. Когда я поместил callback();, я дал команду завершить процесс, и любой запрос API на загрузку данных в S3 никогда не будет выполнен.

Вот упрощенный фрагмент, который работает:

exports.handler = function (context, event, callback) {
    S3.upload(getParams(context, event), function (error, data) {
        if (error) {
            callback(error);
        } else {
            callback(null, "Data Uploaded");
        }
    });
};

Это оно. Надеюсь, что это помогает другим. Ура! =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...