169 похожих чатов

Стоит задача работать с классом и через await и через

new!
То есть для заказчика нужно чтобы:
Класс вызывался как await ClassName() и как new ClassName()
Пока пришло в голову только такое решение:
const F = function() {
// Вызов через await
if ((this instanceof F) == false) {
return Promise.resolve('Вы вызвали через await!');
}

// Вызов через new
console.log('Вы вызвали через new!');
};

(async () => {
new F();// Вы вызвали через new!
console.log(await F());// Вы вызвали через await!
})();
Есть какое-то другое решение задачи? :)

23 ответов

12 просмотров

ну и херня, кнчн) люди чё только не фантазируют вызов через await что делать должен? это типа реализация асинхронного конструктора, что ли? фабрика тогда поудобнее будет

S- Автор вопроса
i7 4n
ну и херня, кнчн) люди чё только не фантазируют ...

await должен вернуть конечный результат, а если через new то к нему можно прицепится и получать данные в онлайн режиме например: (async () => { // Быстро console.log(await F());// Функция выполнина! // Подробно new F() .on(() => { // Тут, что-то приходит при новой итерации. }) .onEnd(() => { // Функция выполнина! }); })(); То есть await это сокращение если мне не нужно знать что там в данный момент происходит, а я просто хочу узнать конечный результат, я вместо (async () => { new F() .onEnd(() => { // Функция выполнина! }); })(); напишу так (async () => { console.log(await F());// Функция выполнина! })();

S
await должен вернуть конечный результат, а если че...

нельзя просто метод-то асинхронный добавить и сделать await F.execute() ?

S
await должен вернуть конечный результат, а если че...

ладно, может, я чего-то не понимаю, просто тут именно я не понимаю зачем хд

S- Автор вопроса
i7 4n
нельзя просто метод-то асинхронный добавить и сдел...

Можно конечно, но задача в том, чтобы получить класс без методов. В основном будет использоваться new, но иногда если нет необходимости получать промежуточный результат, то будет использоваться await И тут есть разница в вашем случае это await F.execute() В этом же случае это просто await F() Понимаете в чем разница?

Не совсем понял что нужно и для чего, но, например, из конструктора ты можешь возвращать промис class AsyncConstructor { constructor(name) { return new Promise((resolve) => setTimeout(() => resolve(this), 2000)) } } async function someFunc () { const myClass = await new AsyncConstructor() console.log(myClass) } someFunc()

S- Автор вопроса
va1
Не совсем понял что нужно и для чего, но, например...

Вот пример (async () => { // Если НЕ нужен промежуточный результат console.log(await F());// Конечный результат! // Если нужен промежуточный результат new F(() => { // Конечный результат! }) .on(() => { // Промежуточный результат! }) })(); Вы же предлагаете сделать так (async () => { // Если НЕ нужен промежуточный результат console.log(await F().someFunc());// Конечный результат! // Если нужен промежуточный результат new F(() => { // Конечный результат! }) .on(() => { // Промежуточный результат! }) })();

S- Автор вопроса
Anton Permyakov
ну так это обычный промис

Стоит задача работать с классом и через await и через new То есть Класс вызывался как await ClassName() и как new ClassName()

S
Стоит задача работать с классом и через await и че...

да пожалуйста, просто не нужно рассказывать, что читаемость становится лучше, это ужасный апи

S- Автор вопроса
Anton Permyakov
да пожалуйста, просто не нужно рассказывать, что ч...

То есть этот вариант лучше await F().someFunc() Чем этот вариант? await F()

S
То есть этот вариант лучше await F().someFunc() Че...

если f это функция, то лучше второй, если класс, то первый

S- Автор вопроса
S
ну я понял ваш подход к написанию кода)

вот и день не зря прошел, получается

S
Можно конечно, но задача в том, чтобы получить кла...

я-то понимаю, только это не удобнее + путанница. надо промис - берите промис. не вижу в этом никакого удобства. имхо, естественно

S- Автор вопроса
i7 4n
я-то понимаю, только это не удобнее + путанница. н...

Понимаете еще в чем дело, в Класс нужно передавать аргументы. Получается выбор даже такой await F.someFunc(args) Вместо await F(args)

S- Автор вопроса
i7 4n
я-то понимаю, только это не удобнее + путанница. н...

Соответственно и содержимое конструктора внутри нужно дублировать или выносить в отдельный метод

S
Понимаете еще в чем дело, в Класс нужно передавать...

звучит как проблемы из воздуха, короче. неинтуитивный апи, который ещё нужен непонятно зачем. тут явно напрашивается метод, который возвращает промис, да и всё - вот вам и await, вот вам и then, catch. а какой там промежуточный результат - я вообще в толк не возьму видимо, я просто не прочувствовал фишку

S- Автор вопроса
i7 4n
звучит как проблемы из воздуха, короче. неинтуити...

Хорошо вот задача. Нужно выполнить массив команд в консоли. Вот ваше решение new Exec([ 'command1', 'command2', 'command3' ]) .onEnd(() => { // Общий результат всех команд }) Но что если нам нужен дополнительный callback чтобы получить результат выполнения каждой команды и потом общий результат Ваше решение new Exec([ 'command1', 'command2', 'command3' ]) .onCommand(() => { // Результат каждой команды }) .onEnd(() => { // Общий результат всех команд }) И ваше решение полностью совпадает с моим до этого момента! Теперь нужно также иметь возможность получать общий результат через промис Ваше решение await Exec.someFunc([ 'command1', 'command2', 'command3' ]) Я же предлагаю просто await Exec([ 'command1', 'command2', 'command3' ]) Постарайтесь объединить все это в голове, это 1 класс, один.., который должен выполнять и эту, и эту, и эту задачи!

S
Хорошо вот задача. Нужно выполнить массив команд в...

я и изначально всё понял на таком уровне, просто вы можете реализовать все ваши крутые фичи, а потом в другом методе вернуть промис и дёрнуть эти ваши крутые фичи, зарезолвив промис онЕнд. всё просто и без лишних гадостей

S- Автор вопроса
i7 4n
я и изначально всё понял на таком уровне, просто в...

В любом случае спасибо, что уделили время!

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

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта