Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 May 11

Ш

Шима in NodeUA - JavaScript and Node.js in Ukraine
думаю можна, но это лишь часть регулярки) она по длинее будет_
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
ну так это вообще типичный случай использования лямбд и чтоб о таком не подумать, и не протестировать, это какими долбогрызами должны были быть разработчики
источник

EK

Evgen K in NodeUA - JavaScript and Node.js in Ukraine
Если выэвейтите просис котооый никогда не резолвится как оно может дойти до 4й строки?
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
тем более, исправляется эта ситуация просто, но не хотелось бы ее копипастов в каждой лямбде патчить
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
там вызывалась функция из библиотеки pg - client.close()
я бы вот вообще не подумала что эта функция может вернуть промис который НЕ резолвится и за счет этого заканчивается event loop и все-все выполнение - ничегошеньки после закрытия клиента не делается
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
мне теперь ходить в код всех библиотек и смотреть нет ли там внутри по какому-то IF условию нерезолвящегося промиса? там может быть где-то внутри отакое

async function connectToDatabase(config) {
   return new Promise(resolve => {
       if (!config.port) return;
       resolve();
   })
}

тот факт что люди написали return а не resolve/reject приводит к такой ситуации (обрыву выполнения всего скрипта)
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Запускай все в вртуалке, брось эти лямбды, самая маленькая виртуалочка решит обработку ивентов по расписанию, а если нагрузка, то на лямбды нагрузку лить - тоже плохая идея
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
ну неважно. был бы это кронджоб. кто-то внутри промиса написал return а не resolve и все - выполнение заканчивается посередине и ищиииииии
источник

EK

Evgen K in NodeUA - JavaScript and Node.js in Ukraine
Эпично
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
как я понимаю если пишут/пишешь new PromisePromise(() => {…}) то обязательно вот там внутри он должен резолвиться или режектиться. а если там ничего не делается (return) то такой промис все выполнение обрывает (в скрипте или лямбде потому что они выходят как только event loop пустой)
источник

Y

Yevhen in NodeUA - JavaScript and Node.js in Ukraine
Вот тут вроде описывается то, что происходит в Вашем примере
https://blog.danillouz.dev/aws-lambda-and-the-nodejs-event-loop/#aws-lambda-execution-model
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Node.js does not wait for ever-pending Promises:
я реально ожидала бы что оно зависнет а не молча выйдет, не делая console.log

(async function main() {
 await new Promise((resolve) => { console.log(42); });
 console.log(`
   This will never be executed is this expected?
   Also node exits as everything is ok with exit code 0...
 `);
})();
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
А какое поведение ожидалось?
Резолва промиса нет, поэтому нет оснований вернуться к строке 4
источник

JK

Jasin Ko in NodeUA - JavaScript and Node.js in Ukraine
Тоже помнится с этим в своё время намучался.
Но с другой стороны логично как по мне - мы ведь не ресолвим.
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
интуитивно я подумала что зависнет. так-то я понимаю что event loop пустой значит выходим. но блин оно (возврат пустого промиса) было под капотом, и не было очевидно почему вышло на строке await client.close() и дальше не пошло
источник

JK

Jasin Ko in NodeUA - JavaScript and Node.js in Ukraine
А, вы о выходе из фун-ции
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
причем вот эти 2 функции:

async function connectToDatabase(config = {}) {
   if (!config.port) return;
   return new Promise(resolve => {
      resolve();
   })
}

кажутся одинаковыми:

async function connectToDatabase(config = {}) {
   return new Promise(resolve => {
      if (!config.port) return;
      resolve();
   })
}

но нет, вторая вызовет такой “тихий выход” из выполнения а первая нет.
потому что вторая иногда создает нерезолвящийся промис [killmepls =)]
источник

Y

Yaroslav in NodeUA - JavaScript and Node.js in Ukraine
Поздравляю, мир не идеальный.
источник

Y

Yevhen in NodeUA - JavaScript and Node.js in Ukraine
А Вы это в коде pg нашли? Можете скинуть ссылку на это место?
источник