CLI NodeJS (параллелизм, обратные вызовы, .methods)

Еще пара вопросов, касающихся использования Nodejs в веб-разработке.

1) Для моего вопроса о параллелизме это касается синтаксиса. Есть ли разница между:

setInterval(function() {
    console.log('Task A');
}, 10);

а также

function setInterval() {
    console.log('Task A');
}, 10);

Кроме того, я немного запутался, что означает "10" в конце метода, я думаю, сколько времени занимает завершение метода?

2) Обратные вызовы. Являются ли Обратные вызовы технически просто другим именем в Node для тестирования кода?

3) Есть ли метод, который я могу использовать в узле (CLI), чтобы увидеть все методы в модуле?

EX:

var fs = require('fs');

Очевидно, что в модуле файловых систем существует множество методов, но, подобно языку Ruby, используя PRY в CLI, вы можете набрать 'fs.methods', который отобразит все методы. Затем, используя "кошка", вы можете увидеть содержимое каждого отдельного метода. Что-то вроде этого для Node(CLI)?

Спасибо за все советы / ответы!

Ура, G

2 ответа

Решение

1. Во-первых, вы передаете анонимную функцию, которая будет вызываться с интервалом. Здесь вы используете API-интерфейс node.js setInterval.

Во втором примере вы объявляете функцию с именем setInterval. Похоже, синтаксическая ошибка есть...

setInterval - это функция, которая принимает 2 объекта в качестве параметров. Вот и все. первый параметр должен быть функцией, а второй параметр должен быть интервалом времени в миллисекундах. Все, что делает setInterval, это запускает функцию, переданную в первом параметре (обратный вызов) каждые x миллисекунд, как указано во втором параметре.

2. Нет. Обратные вызовы - это функции, которые могут быть переданы другим функциям, чтобы их можно было вызывать позже в коде. Обратные вызовы распространены в приложениях node.js и тесно связаны с их асинхронной архитектурой, основанной на событиях. Это один из самых распространенных шаблонов, которые можно увидеть в node.js.

3. Просто посмотрите api-документы node.js на их веб-сайте.

Я рекомендую вам прочитать о цикле событий node.js и асинхронном программировании.

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

Есть ли разница между этими двумя?

Да, два совершенно разные. Один использует встроенную функцию таймера, другой пытается объявить свою собственную функцию, которая не имеет ничего общего с таймерами.

Позвольте мне объяснить ваши два примера:

Встроенный setInterval функция

setInterval(function() {
    console.log('Task A');
}, 10);

Nodejs имеет встроенную функцию таймера под названием setInterval, Вы можете найти документ для этого здесь.

Вы передаете этой функции два аргумента. Первый аргумент - ссылка на функцию, второй аргумент - количество времени в миллисекундах. Инфраструктура таймера nodejs будет вызывать функцию, которую вы передали ей каждые N миллисекунд.

Может быть немного проще понять, как работает setInterval, если посмотреть, как он используется следующим образом:

function myFunction() {
    console.log('Task A');
}

setInterval(myFunction, 10);

Это имеет тот же результат, что и ваш первый пример, но я думаю, что более четко показывает, как setInterval() это встроенная функция, которая принимает два аргумента, функцию и число.

В вашем примере вместо именованной функции вы передаете анонимную функцию, которая просто console.log('Task A'); и эта функция будет вызываться каждые 10 мс (приблизительно).

Создайте свою собственную функцию

 function setInterval() {
     console.log('Task A');
 }, 10);

Этот блок кода является синтаксической ошибкой Javascript и не будет работать. Похоже, вы пытаетесь определить свою собственную функцию под названием setInterval(), но это не правильный синтаксис для объявления функции.

Вы можете сделать его легальным синтаксисом, например так:

function setInterval() {
    console.log('Task A');
}

И тогда вы бы назвали это так:

 setInterval();

Это не имеет ничего общего с предыдущим примером. Это просто создает функцию, которая запускается один раз при каждом ее вызове. Если вы на самом деле дали ему то же имя, что и глобальная функция setInterval()тогда ваше локальное определение заменит его в той области, в которой оно было объявлено.

Ваши другие вопросы

Кроме того, я немного запутался, что означает "10" в конце метода, я думаю, сколько времени занимает завершение метода?

10 в первом примере это количество миллисекунд для интервального таймера. 10 во втором примере это не относится - это часть синтаксической ошибки Javascript.

Обратные вызовы. Являются ли Обратные вызовы технически просто другим именем в Node для тестирования кода?

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

Есть ли метод, который я могу использовать в узле (CLI), чтобы увидеть все методы в модуле?

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

Когда вы загружаете модуль в узел с чем-то вроде:

var fs = require('fs');

Объект, который вы получите от require() Функция является объектом Javascript. Все методы этого модуля являются свойствами этого объекта. Вы можете проверить этот объект в отладчике или с помощью console.log(fs) или путем написания кода для итерации свойств этого объекта.

var fs = require('fs');
for (var prop in fs) {
    if (fs.hasOwnProperty(prop)) {
        console.log(prop);
    }
}
Другие вопросы по тегам