Есть ли способ сократить функцию-член объекта условно в JavaScript? - PullRequest
0 голосов
/ 20 марта 2020

Я делаю функцию, которая принимает .toArray() и без. Есть ли условный способ добавить это в es6, es7 или es8?

await db
   .collection(collection)
   .find(params)
   .toArray() //I want tis conditionally added or not

В смысле этого (это не работает)

   multiple && .toArray()

Или это возможно только на два метода?

1 Ответ

1 голос
/ 20 марта 2020

Есть ли способ условно сократить функцию-член объекта в JavaScript?

Не совсем. У вас есть набор методов в цепочке, и вы не можете условно вставить что-то в цепочку.

Мне кажется, что самый ясный вариант такой:

let x = db.collection(collection).find(params);
if (someCondition) x = await x.toArray();

Существуют и другие странные вещи, такие как как установка метода no-op для объекта заблаговременно, а затем выполнение метода из переменной, которая иногда будет содержать «toArray», а иногда - «n oop».

let x = await db.collection(collection).find(params)[someCondition ? "toArray" : "noop"]();

Но я не думаю, что я когда-либо сам напишу код таким образом, потому что я не вижу его очень ясным.


К вашему сведению, ваш конкретный пример немного странный, потому что .find() возвращает объект курсора и .toArray() возвращает обещание, которое разрешается в массив. Итак, вы также просите в конечном итоге использовать разные типы данных в одну сторону по сравнению с другой. Кажется, что этот другой тип результата в любом случае должен будет go искать другой путь к коду, так что условная ветвь - это нечто большее, чем просто этот один шаг. Это означает, что на самом деле следует взглянуть на общую картину проблемы в целом больше, чем просто этот шаг или приказ найти лучшее решение.

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