Ваш код является управляемым событиями / асинхронным, что означает, что вы вызываете обратный вызов до того, как будут заполнены screenshotLinks.
Метод узла http.ClientRequest.end () заканчивает отправку запроса, но это не означает, что ответ был получен и обработан, как это делается асинхронным событиемобработчик.Однако обратный вызов выполняется сразу после вызова метода request.end (), то есть сразу после того, как запрос был запущен, поэтому screenshotLinks пуст.
Вам необходимо выполнить обратный вызов из пройденного вами обратного вызовав s3.putObject.Я предлагаю вам передать свой обратный вызов объекту ответа / результата, который указывает, успешно ли был выполнен putObject и содержит ли URL-адрес, к которому он относится, и либо сообщение об ошибке, либо screenshotLink, например что-то вроде этого:
s3.putObject(params, function(err, data, callback) {
var s3Response;
s3Response.url = url;
if (err) {
s3Response.success = false;
s3Response.error = err;
console.error(err, err.stack);
} else {
bunch = params.Bucket + '/' + params.Key;
s3Response.success = true;
s3Response.screenshotLink = bunch;
}
callback(null, s3Response);
});