Это очень легко понять.Функция wait()
является синхронной.
Ключевое слово async
не делает функцию асинхронной.Он позволяет использовать только ключевое слово await
внутри функции, отмеченной async
.
Так как же узнать, является ли функция асинхронной или синхронной?Самый простой способ - прочитать документы.
В Javascript практически отсутствуют функции, которые могут сигнализировать вам, является ли функция синхронной или асинхронной.Даже существование обратных вызовов не является сигналом.Например, Array.prototype.sort()
принимает обратный вызов, но полностью синхронен.Ключевое слово async
является хорошим шагом в правильном направлении, которое может сигнализировать о том, что функция является асинхронной, но, как вы сами продемонстрировали, это зависит от того, понимает ли автор функции, что делает ключевое слово async
.
Положительным моментом является то, что документация в javascript, как правило, очень хороша в отличие от других языков, таких как Java или C ++, потому что обычно нет автоматической документации (даже если вы используете автоматическую систему документации в js, вам нужно вручную написать для нее комментарии).Существует общая культура написания подробной и понятной документации в файлах README, так что npm забирает ее для пользователей библиотек.
Итак, как можно написать асинхронную функцию в javascript?
Обычно есть только два способа сделать это:
Использовать асинхронную функцию.Например, setTimeout()
или fetch()
:
function waitOneSecond () {
return new Promise(functionn (ok,err) {
setTimeout(ok,1000);
});
}
Запишите его в C. Для node.js вы можете использовать API Addons для реализации модулей в C / C ++ (https://nodejs.org/api/addons.html), В Chrome есть NaCl (https://developer.chrome.com/native-client) и т. Д.). Так были реализованы такие функции, как setTimeout()
, fetch()
и т. Д.