Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 October 05

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Святом Коране сказано: «Мы установили во всех селениях правителей преступниками, дабы они интриговали...»
источник

Р

Руслан in NodeUA - JavaScript and Node.js in Ukraine
є над чим подумати
источник

MS

Max Shane in NodeUA - JavaScript and Node.js in Ukraine
Подскажите, как-то можно сделать, чтобы функция f2 выполнилась до f1 обернув функции в одинаковые обертки ? Функция f1 вызывает блокирующую операцию. Я могу разными способами сделать чтобы f2 выполнялась первая (например засунуть f1 в таймаут), но тогда эти решения будут подразумевать, что я заранее знаю что f1 блокирующая.
   const f1 = () => {
       let benchData = bench(50000);
       console.log( {benchData} );
   }
   const f2 = () => {
       let check = 3;
       console.log( {check} );
   }
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
что значит "одинаковые обертки"?
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
пока я вижу, что:
f2()
f1()

решает твою проблему)
источник

`

`` in NodeUA - JavaScript and Node.js in Ukraine
Нельзя засунуть обе в асинхроную функцию и эвейт?!
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
если это блокирующий цикл, то эвейт не поможет
источник

MS

Max Shane in NodeUA - JavaScript and Node.js in Ukraine
У меня пока нет проблемы)  Я может не совсем понятно сформулировал задачу. То что ты написал, это как раз соответствует тому, что мы заранее знаем какая из функций блокирующая. Тогда я могу сам вызвать функции в том порядке в каком мне нужно. А если я не знаю, как написать, чтобы блокирующие операции уходили в тред пул?
источник

MS

Max Shane in NodeUA - JavaScript and Node.js in Ukraine
Я пробовал и через в async и в промисы обернуть, но все равно порядок остается такой в каком функции объявлены. Хотя функция f2 неблокирующая
источник

MS

Max Shane in NodeUA - JavaScript and Node.js in Ukraine
Если так сделать нельзя, объясните тогда пожалуйста, что я не понимаю
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
Функция 2 - тоже блокирующая, просто она очень быстро выполняется. Если строго говорить.
источник

MS

Max Shane in NodeUA - JavaScript and Node.js in Ukraine
А почему это она блокирующая?
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
Потому что пока она не закончит свое действие, следующий кусок кода не начнется.
источник

VK

Vladymyr Krasulya in NodeUA - JavaScript and Node.js in Ukraine
просто пойми тот факт что любая функция блокирующая пока она выполняется
источник

MS

Max Shane in NodeUA - JavaScript and Node.js in Ukraine
Офигеть какой у меня пробел в знаниях
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
Если только это не асинхронная функция (реально асинхронная, которая работает с хттп или файлами).
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
А то можно позначить функцию как async, но это не поможет
источник

VK

Vladymyr Krasulya in NodeUA - JavaScript and Node.js in Ukraine
ну вот да , асинхронность начинается когда функция отдает управление обратно петле
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
Как я понял твою проблему - если функция асинхронная, то можно ее выполнять в своем потоке. Если синхронная, то нужно новый тред создать под нее.
Чтобы понять, что функция асинхронная, есть конструктор AsyncFunction. Тебе нужно смотреть конструкторы.

async function hello(){}

typeof hello
> "function"

hello.constructor
> function AsyncFunction()

У обычной функции будет, соответственно, Function.

Тогда все Function ты можешь отдавать в тред пул
источник

S

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