s3.getObject (). обещание () никогда ничего не возвращает

Глядя в отражатель, вы можете видеть верхнюю часть ChangeType(object, Type, IFormatProvider), которая называется тем, что вызывается под обложками:

public static object ChangeType(object value, Type conversionType, IFormatProvider provider)
{
  //a few null checks...
  IConvertible convertible = value as IConvertible;
  if (convertible == null)
  {
    if (value.GetType() != conversionType)
    {
        throw new InvalidCastException(Environment.GetResourceString("InvalidCast_IConvertible"));
    }
    return value;
  }

Таким образом, он выглядит как объект типа, который не реализовать IConvertible, но уже есть , тип назначения просто вернет исходный объект.

Предоставлено, что это исключение only для значения, требуемого для реализации IConvertible, но это исключение и похоже на причину, по которой параметр object вместо этого.


Вот быстрый тест LinqPad для этого случая:

void Main()
{
  var t = new Test();
  var u = Convert.ChangeType(t, typeof(Test));
  (u is IConvertible).Dump();   //false, for demonstration only
  u.Dump();                     //dump of a value Test object
}

public class Test {
  public string Bob;
}
0
задан derspringendepunk 19 March 2019 в 07:50
поделиться

3 ответа

Если вы не хотите извлекать его в переменную перед доступом к телу, как подсказал @tuulka, просто заключите его в скобки.

const data = (await (s3.getObject(params).promise())).Body.toString('utf-8')
0
ответ дан Thales Minussi 19 March 2019 в 07:50
поделиться

Время ожидания AWS SDK по умолчанию составляет 120000 мс. Если тайм-аут вашей лямбды короче, вы никогда не получите фактическую ошибку.

Либо увеличьте время ожидания AWS

var AWS = require('aws-sdk');
var s3 = new AWS.S3({httpOptions: {timeout: 3000}});

, либо увеличьте время ожидания лямбды.

0
ответ дан derspringendepunk 19 March 2019 в 07:50
поделиться

Эта проблема определенно связана с подключением.

Проверьте настройки VPC, так как он может блокировать подключение Lambda к Интернету (управляемые сервисы AWS в качестве S3 доступны только через Интернет).

0
ответ дан ttulka 19 March 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: