Цепочки обещаний, неправильный порядок

почему бы не протестировать его?

просто настроить 2 консольных приложения заставляют его смотреть 10 миллионов раз и сравнивать результаты ... не забудьте запустить их как правильно выпущенные приложения, которые были установлены правильно, или же вы не может гарантировать, что вы не просто запускаете msil.

На самом деле вы, вероятно, получите около 5 ответов, в которых говорится: «Не стоит беспокоиться об оптимизации». они явно не записывают подпрограммы, которые должны быть как можно быстрее, прежде чем читать (например, игры).

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

На самом деле ТОЛЬКО способ ответить на любой из этих вопросов - это выяснить это это фрагмент кода, который будет полезен при оптимизации. Затем вам нужно знать те вещи, которые увеличивают время выполнения. На самом деле мы, простые смертные, не можем сделать это априори, поэтому просто попробуйте 2-3 разных версии кода, а затем протестируйте их.

1
задан GarfieldKlon 19 March 2019 в 08:31
поделиться

3 ответа

При использовании синтаксиса стрелок вы можете интерпретировать его во многих вещах:

() => 'hello'

эквивалентно

() => { return 'hello'; }

Однако при выполнении

() => {'hello'}
[1111 ] так же, как вы написали:

.then( () => {b().then( result => console.log(result))})

, тогда вы можете интерпретировать это как

() => {'hello'; return;}

Итак, в коде ваша обработка обещаний b().then( result => console.log(result)) вызывается перед void [ 116] сделано. Вы вообще не возвращаете полученный объект обещания. Он вызывается, когда b закончено, независимо от того, что вы делали.

0
ответ дан KarelG 19 March 2019 в 08:31
поделиться

Когда нет фигурных скобок, вам разрешено писать только одно выражение, которое неявно возвращается? А когда вы используете фигурные скобки, вы должны явно что-то возвращать?

Да .

Но почему это портит порядок при использовании фигурных скобок без возврата? И почему он все еще что-то регистрирует, когда возвращение отсутствует?

Поскольку функция обещания then полагается на возвращаемые значения для цепочки.

Помните, что then возвращает новое обещание для результата обратного вызова . Когда этот результат является еще одним обещанием, он ждет результата этого внутреннего обещания, прежде чем выполнить возвращенное обещание - то, на котором вы связываете второй вызов then().

Если ваш обратный вызов запускает b().then(…), но возвращает undefined, следующий шаг в цепочке (вызов c()) не ожидает завершения b.

0
ответ дан Bergi 19 March 2019 в 08:31
поделиться

Это связано с функциями стрелок. Когда вы опускаете фигурные скобки, возвращение неявно. Таким образом,

const f = () => 42;

эквивалентно

const f = () => { return 42; };

Кроме того, b().then(something).then(somenthingElse) - все еще только одно выражение, поэтому оно может быть возвращено неявно.

0
ответ дан Dan Homola 19 March 2019 в 08:31
поделиться
Другие вопросы по тегам:

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