Я пытаюсь лучше понять, что такое async function
в JavaScript с технической точки зрения, даже если я в основном знаю, как их использовать.
Многие знакомства с async/await заставляют поверить, что функция async
в основном является просто обещанием, но это явно не так (по крайней мере, не с код, транспилированный Babel6):
async function asyncFunc() {
// nop
}
var fooPromise = new Promise(r => setTimeout(r, 1));
console.clear();
console.log("typeof asyncFunc is", typeof asyncFunc); // function
console.log("typeof asyncFunc.next is", typeof asyncFunc.next); // undefined
console.log("typeof asyncFunc.then is", typeof asyncFunc.then); // undefined
console.log("typeof fooPromise is", typeof fooPromise); // object
console.log("typeof fooPromise.next is", typeof fooPromise.next); // undefined
console.log("typeof fooPromise.then is", typeof fooPromise.then); // function
Тем не менее, определенно возможно await
обещание, например await fooPromise()
.
Является ли
async funtion
отдельной вещью, аawait
просто совместим с промисами?и есть ли способ отличить простой
function
отasync function
во время выполнения (совместимым с Babel способом)?