Может ли кто-нибудь дать мне простой пример обратных вызовов nodeJs, я уже искал то же самое на многих веб-сайтах, но не мог понять его должным образом. Пожалуйста, дайте мне простой пример.
getDbFiles(store, function(files){
getCdnFiles(store, function(files){
})
})
Я хочу сделать что-то подобное ...
javascript
node.js
asynchronous
callback
asynccallback
Бхушан Гоэль
источник
источник
Ответы:
Теперь откройте узел или консоль браузера и вставьте приведенные выше определения.
Наконец, используйте его со следующей строкой:
В отношении соглашений об ошибках в стиле узла
Коста спросил, как бы это выглядело, если бы мы соблюдали правила обратного вызова ошибок узла.
В этом соглашении обратный вызов должен ожидать получения по крайней мере одного аргумента, первого аргумента, как ошибки. При желании у нас будет один или несколько дополнительных аргументов, в зависимости от контекста. В данном случае контекст - это наш приведенный выше пример.
Здесь я переписываю наш пример в этом соглашении.
Если мы хотим смоделировать случай ошибки, мы можем определить usingItNow следующим образом
Окончательное использование точно такое же, как указано выше:
Единственное различие в поведении будет зависеть от того, какую версию
usingItNow
вы определили: та, которая передает «истинное значение» (объект Error) в обратный вызов для первого аргумента, или та, которая передает его null для аргумента ошибки. ,источник
Функция обратного вызова - это просто функция, которую вы передаете другой функции, чтобы эта функция могла вызвать ее позже. Это обычно наблюдается в асинхронных API ; вызов API возвращается немедленно, потому что он асинхронный, поэтому вы передаете ему функцию, которую API может вызвать, когда он завершит выполнение своей асинхронной задачи.
Самый простой пример, который я могу придумать в JavaScript, - это
setTimeout()
функция. Это глобальная функция, которая принимает два аргумента. Первый аргумент - это функция обратного вызова, а второй аргумент - задержка в миллисекундах. Функция предназначена для ожидания подходящее количество времени, а затем вызывает функцию обратного вызова.Возможно, вы видели приведенный выше код раньше, но просто не понимали, что передаваемая вами функция называется функцией обратного вызова. Мы могли бы переписать приведенный выше код, чтобы сделать его более очевидным.
Обратные вызовы используются в Node повсеместно, потому что Node построен с нуля, чтобы быть асинхронным во всем, что он делает. Даже при разговоре с файловой системой. Вот почему тонна внутренних API-интерфейсов Node принимает функции обратного вызова в качестве аргументов, а не возвращает данные, которые вы можете присвоить переменной. Вместо этого он вызовет вашу функцию обратного вызова, передавая данные, которые вы хотите, в качестве аргумента. Например, вы можете использовать
fs
библиотеку Node для чтения файла.fs
Модуль предоставляет два уникальных функций API:readFile
иreadFileSync
.readFile
Функция является асинхронным , аreadFileSync
, очевидно , нет. Вы можете видеть, что они предполагают, что вы будете использовать асинхронные вызовы, когда это возможно, поскольку они вызвали их,readFile
аreadFileSync
неreadFile
иreadFileAsync
. Вот пример использования обеих функций.Синхронный:
Приведенный выше код блокирует выполнение потока до тех пор, пока все содержимое не
test.txt
будет считано в память и сохранено в переменнойdata
. В узле это обычно считается плохой практикой. Однако бывают случаи, когда это полезно, например, при написании небольшого небольшого скрипта, чтобы сделать что-то простое, но утомительное, и вы не заботитесь об экономии каждой наносекунды времени, которое вы можете.Асинхронный (с обратным вызовом):
Сначала мы создаем функцию обратного вызова, которая принимает два аргумента
err
иdata
. Одна из проблем с асинхронными функциями заключается в том, что становится труднее отлавливать ошибки, поэтому многие API-интерфейсы в стиле обратного вызова передают ошибки в качестве первого аргумента функции обратного вызова. Лучше всего проверить,err
имеет ли значение значение, прежде чем делать что-либо еще. Если да, остановите выполнение обратного вызова и зарегистрируйте ошибку.Синхронные вызовы имеют преимущество, когда возникают исключения, потому что вы можете просто поймать их с помощью
try/catch
блока.В асинхронных функциях это не работает. Вызов API возвращается немедленно, так что с помощью
try/catch
. Правильные асинхронные API-интерфейсы, использующие обратные вызовы, всегда отлавливают свои собственные ошибки, а затем передают их в обратный вызов, где вы можете обрабатывать их по своему усмотрению.Однако, помимо обратных вызовов, существует еще один популярный стиль API, который обычно используется под названием обещание. Если вы хотите прочитать о них, вы можете прочитать всю запись в блоге, которую я написал на основе этого ответа здесь .
источник
Вот пример копирования текстового файла с помощью
fs.readFile
иfs.writeFile
:И это пример использования
copyFile
функции:Распространенный шаблон node.js предполагает, что первый аргумент функции обратного вызова является ошибкой. Вы должны использовать этот шаблон, потому что все модули потока управления полагаются на него:
источник
Попробуйте этот пример настолько простым, насколько вы можете прочитать, просто скопируйте save newfile.js do node newfile для запуска приложения.
источник
мы создаем простую функцию как
источник
'fs' - это модуль узла, который помогает вам читать файл. Функция обратного вызова гарантирует, что ваш файл с именем 'input.txt' полностью прочитан, прежде чем он будет выполнен. Функция fs.stat () предназначена для получения информации о файле, такой как размер файла, дата создания и дата изменения.
источник
источник
A
callback
- это функция, переданная в качестве параметраHigher Order Function
( википедия ). Простая реализация обратного вызова:Чтобы вызвать функцию, просто передайте другую функцию в качестве аргумента определенной функции.
источник
У этого сообщения в блоге есть хорошая рецензия:
https://codeburst.io/javascript-what-the-heck-is-a-callback-aba4da2deced
источник