Search
Write a publication
Pull to refresh
3
0
Illia Fralou @ilfroloff

node.js, front-end

Send message
Однако, на самом деле в EcmaScript есть специальный синтаксис, еще сильнее упрощающий такие задачи. Он называется object spread, использовать его можно при помощи транспилятора Babel.

А можно ссылку в спецификации про object spread? Потому что ни в последнем Chrome, ни в FF, ни в node.js 6/7 "из коробки" эта возможность не работает. Однако по таблице поддержки из статьи spread везде поддерживается полностью. Полагаю, что это какая-то драфтовая возможность

Может немного оффтоп, но все же.


Странная мания пошла популяризировать фичи, которые еще не скоро появится. Да, у async-await — stage 3, но официальную публикацию спецификации планируют "аж" в 2017, а поддержка в браузерах и того боле. Все-таки, в мире javascript решения плодятся быстрее, чем дрожжи, и полгода-год — это очень много.


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


Все ИМХО

Да, неверно сформулировал.
Имелось в виду, что получение результата происходит в функции инициализации, а синхронно или асинхронно вызывается resolve — не суть важно.

// Первое разрешение обещания
promise.then(function(result){
  // При разрешении обещания происходит асинхронный вызов,
  // результат которого передается в эту функцию
});
// Повторное разрешение того же обещания
promise.then(function(result){
  // Теперь уже асинхронный вызов не выполняется.
  // В эту функцию передается сохраненный результат
  // разрешения обещания
});

Не верно это.
Получение результата промиса происходит во время синхронной инициализации самого промиса:


console.log('1');
const promise = new Promise(resolve => {
    resolve('result');
    console.log('2');
});
console.log('3');

/*
В консоль выведется 1,2,3, а promise уже содержит готовый результат 'result'
*/

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

Очень надоедливая проблема. Я нашел ее решение в этой статье (к сожалению, только для OS X).
Может кому-то будет полезно, если он не привязан к JetBrains продуктам.

Если правильно понял, то что-то такое:


import a from 'a';
import b from 'b';
import c from 'c';

export default { a, b, c }

Больше вопрос возникает — где такое может реально понадобиться? На практике не помню, чтобы встречал подобное, поэтому интересно было бы посмотреть на пример использования.

Это вопрос не в рамках статьи, но если говорить, про tree-shaking, то CommonJS предполагает разбиение на маленькие модули, которые будут непосредственно импортироваться (тот же lodash). Например, хелперы будут выглядеть, как множество отдельный файлов с одним методом. Фактически tree-shaking делается "руками", поэтому нельзя сказать, что это минус. Скорее специфика CommonJS.

Статья больше в контексте сервера (как сказали комментарием ниже) — это наиболее частый сценарий при использовании node.js.


Если же использовать node.js, как, например, bash-скрипт, то тогда нет большой необходимости использовать require в начале файла, потому что при исполнении скрипта синхронные операции могут быть вполне ожидаемы и даже необходимы.
Но опять же — это ситуативно, и может запутать, если на вашем проекте серверный код написан с вынесением require вверх файла, а в node.js-скриптах уже по месту востребования. Лично я бы везде придерживался одного стиля — стараться использовать require/exports только вверху.

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Registered
Activity