Я буду полностью честным ... первый раз, когда я прочитал, что же Callbacks раздел на странице 53 Javascript, хорошие части, я сделал то же самое предположение, как вы делали хахаха, но только позже я понял, что имел в виду автор.
Ваше предыдущее заявление не на самом деле правильно:
Однако следующий код называется асинхронно:
Перед Автор показывает код с помощью функции обратного вызова, он говорит нижеследующий пункт:
Лучшим подходом является создание асинхронного запроса, обеспечивающего функцию обратного вызова , которая будет вызывается, когда ответ сервера равен . Асинхронная функция возвращает сразу, поэтому клиент не заблокирован:
Важную роль здесь: ... сделать асинхронный запрос, ПРЕДОСТАВЛЕНИЕ функцию обратного вызова ...
Автор пытаюсь сделать точку, что вы могли бы сделать такую функцию:
send_request_asynchronously(request, function (response) {
display(response);
});
, что не выполняет function (response) {display(response);}
в то время код запускается через переводчик, а через некоторое время в будущем, когда вызывается код send_request_asynchronously
И позже в коде вы можете сделать его асинхронным. Сам код сам по себе не имеет ничего асинхронного. Он разработан для асинхронного вызова позже.
«ПРЕДОСТАВЛЕНИЕ функции обратного вызова» является ключом к выводу, что это то, что имел в виду автор. Если вы заметили, после функции обратного вызова нет конца ()
. Если вы имели косую ()
вроде так:
send_request_asynchronously(request, function (response) {
display(response);
}());//<--- right here
то функция будет выполнять прямо там и тогда, когда интерпретатор читает через ту часть кода, следовательно, заставляя систему быть S ynchronous, где поскольку, не включая ()
, вы открываете дверь для нее A синхронно в будущем, реализуя код с асинхронными функциями, которые затем вызывают эту функцию.
В качестве окончательного важного момента, помните, что это то, что делает функцию обратного вызова функцией обратного вызова. Он не вызывается, когда вы включаете функцию в параметр. Так, например, если я функция под названием приветствий:
var salutations = function (hello(){alert('hi')})
{
alert ('salutations!');
}
, и если у меня не было больше коды после предыдущего кода, вы никогда не увидите уведомление всплывающего окна. Он будет вызываться только при вызове/вызове после его объявления/инициализации (HENCE: термин «он вызывается» после того, как был создан обратный вызов AKA). Однако, если бы я включил конечный ()
после функции обратного вызова, он затем заставил бы функцию фактически выполнять во время объявления и инициирования функции salutations
.
Невозможно явно указать функции для запуска асинхронной работы, только некоторые встроенные методы асинхронны, такие как XMLHttpRequest, setTimeout и setInterval, все остальные функции будут выполняться синхронно, так как javascript является однопоточным, и нет возможности запускать что-то асинхронное, кроме обмана с тайм-аутами. Приведенные вами примеры просто показывают обычный синтаксис таких функций и не имеют никакого отношения к мошеннику или нет, они асинхронны или нет. – adeneo
Как сказал adeneo: Использование обратного вызова не предполагает асинхронного поведения; это должно быть добавлено источником родных событий. Кроме того, обратные вызовы могут быть не очевидны с асинхронными источниками, которые возвращают обещания. В соответствующей документации должно быть разъяснено, как ведет себя эта функция. – user2864740
@adeneo Благодарим вас за ответ. Итак, для вышеупомянутой функции (send_request_asynchronously()), я должен использовать эти асинхронные методы внутри определения для достижения асинхронного вызова? – Ra1nWarden