Size: a a a

JavaScript.Ninja

2021 June 04

AK

Anton Kalodzich in JavaScript.Ninja
Что значит вложенные промисы?
источник

VK

Vladimir Klimov in JavaScript.Ninja
Пррмис, который резолвит промис?🤔
Не понял я еще как этот async/await устроен
источник

IK

Illya Klymov in JavaScript.Ninja
runtypes
источник

AS

Alexey Shultsev in JavaScript.Ninja
тут ничего особо понимать не надо
я прямо вот сегодня на своем пет проекте делал точно так же
но как делал я - у меня идет работа с модулем fs вместо использования БД, и я сделал себе мини-либу стандартных операций на чтение, запись, обновление, удаление, переименование, создание подпапок и т.д.
всю работу я организовал на fs.promises, через async-await
в общем, мне необходимо было прочитать несколько файлов сразу, находящихся в одной папке
я сначала сделал readdir - мне вернулся массив строк с именами файлов
и затем для каждого элемента массива через map я вызываю функцию, возвращающую промис
и уже полученный после map массив я отдаю в Promise.all и дожидаюсь выполнения
источник

MM

Mikita Melnikau in JavaScript.Ninja
Уважаемые ниндзя! Добрый вечер! Подскажите почему у меня pgadmin не видит postgres. Запускаю через docker-compose. dbeaver видит - всё ок. Конфиг тут https://gist.github.com/PinkyRabbit/2b8c7576ce0c66f73336285b46296c48 Спасибо!
источник

AS

Alexey Shultsev in JavaScript.Ninja
но опять же, резолв промиса, который возвращается от Promise.all тоже нужно дожидаться через await
const myFunc = (...args) => {
...
const results = await Promise.all(promises);
...
источник

AS

Alexey Shultsev in JavaScript.Ninja
что за дичь, мой линух не отображает маркдаун о_О
источник

VK

Vladimir Klimov in JavaScript.Ninja
Вы не поняли мой вопрос
Я просто хочу понять есть ли разница в эффективности кода типа:

const proms = arr.map(async () => await foo())

await Promise.all(proms)

И

const proms = arr.map( () =>foo())

await Promise.all(proms)
источник

VK

Vladimir Klimov in JavaScript.Ninja
Когда мы в колбеке map делаем await чтобы что-то сделать там асинхронное
источник

AS

Alexey Shultsev in JavaScript.Ninja
так
мой ответ будет таков (на истину не претендую, если не прав - буду признателен за правильный ответ)
в моем понимании второй пример эффективнее
потому что await, как следует из собственного названия и документации, приостанавливает выполнение функции
источник

VK

Vladimir Klimov in JavaScript.Ninja
Интуитивно и мне так кажется, но я не понимаю как именно это работает
источник

AK

Anton Kalodzich in JavaScript.Ninja
Foo возвращает промис?
источник

VK

Vladimir Klimov in JavaScript.Ninja
Да
источник

AK

Anton Kalodzich in JavaScript.Ninja
Тогда без разницы
источник

D

Dimitrii in JavaScript.Ninja
Не будут
источник

D

Dimitrii in JavaScript.Ninja
Но если в промис вложить массив, а в массив промис...😏
источник

AK

Anton Kalodzich in JavaScript.Ninja
Точнее в первом случае на одну микротаску больше на каждой итерации, если прямо так сравнивать
источник

AK

Anton Kalodzich in JavaScript.Ninja
Потому и говорят не писать return await
источник

VK

Vladimir Klimov in JavaScript.Ninja
Прелствьте, что там не просто return await, а какая-то еще логика как в исходном скрине
источник

AK

Anton Kalodzich in JavaScript.Ninja
Но если во второй пример добавить .then, то разницы не будет
источник