Mongodb $ addFields, вернуть значение поля из функции?

Фокус в том, чтобы сначала убедиться, что ни один из фьючерсов не сработал. .recover - ваш друг здесь, вы можете объединить его с map, чтобы преобразовать все результаты Future[T] в экземпляры Future[Try[T]]], все из которых наверняка будут успешными фьючерсами.

Примечание: здесь вы также можете использовать Option или Either, но Try является самым чистым способом, если вы специально хотите улавливать исключения

def futureToFutureTry[T](f: Future[T]): Future[Try[T]] =
  f.map(Success(_)).recover(x => Failure(x))

val listOfFutures = ...
val listOfFutureTrys = listOfFutures.map(futureToFutureTry(_))

Затем используйте Future.sequence как и раньше, чтобы дать вам Future[List[Try[T]]]

val futureListOfTrys = Future.sequence(listOfFutureTrys)

Затем фильтр:

val futureListOfSuccesses = futureListOfTrys.map(_.filter(_.isSuccess))

Вы можете даже вытащить определенные сбои, если они вам понадобятся:

val futureListOfFailures = futureListOfTrys.map(_.filter(_.isFailure))
1
задан mickl 16 January 2019 в 21:51
поделиться

1 ответ

Вы не можете объединять подобные строки в агрегации mongoDB, вам нужно объединять строки с помощью оператора concat, поэтому функция createImageURL должна выглядеть примерно так,

module.exports.createImageURL = function ImageURL(){
    return { $concat: [ "https://myhostingservice.com/", "$video_id", "/preview_image" ] };
};
0
ответ дан Visrozar 16 January 2019 в 21:51
поделиться
Другие вопросы по тегам:

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