我试图更好地理解async function
JavaScript在技术上是什么,即使我基本上知道如何使用它们.
对async/await的许多介绍都相信async
函数基本上只是一个承诺,但事实上并非如此(至少不是Babel6-transiled代码):
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兼容的方式)?
Madara Uchih.. 10
异步函数是一个返回promise的函数.它可以帮助您解决一堆异步操作一个接一个地发生的情况:
function asyncFunc() { return doSomethingAsync() // doSomethingAsync() returns a promise .then(() => { // do some stuff return doSomethingElseAsync(); // returns a promise }) .then(something => { // do some stuff return doSomethingElseEntirelyAsync(something); // returns a promise }); }
转向
async function asyncFunc() { await doSomethingAsync(); // awaits for a promise // do some stuff let something = await doSomethingElseAsync(); // awaits for a promise // do some stuff return doSomethingElseEntirelyAsync(something); // returns the final promise // Note that even if you return a value, like return 5, the function as a whole // still returns a promise! }
它看起来好多了,你可以使用像try/catch和for循环这样的常规工具来处理它们,即使它们是异步的.
异步函数不是 promises的替代品,它们在它们之上是糖,用于处理具有许多顺序异步操作的特定情况.
因为await
基本上只是"等待这个承诺",你仍然可以使用类似Promise.all()
和的酷聚合方法,Promise.race()
并等待几个(或几个)承诺的结果.
我不熟悉在运行时区分这两者的方法,因为像类一样,异步函数只是Promise之上的糖.(虽然可能有像使用函数.toString
和解析结果的黑客,但我不计算那些).
异步函数是一个返回promise的函数.它可以帮助您解决一堆异步操作一个接一个地发生的情况:
function asyncFunc() { return doSomethingAsync() // doSomethingAsync() returns a promise .then(() => { // do some stuff return doSomethingElseAsync(); // returns a promise }) .then(something => { // do some stuff return doSomethingElseEntirelyAsync(something); // returns a promise }); }
转向
async function asyncFunc() { await doSomethingAsync(); // awaits for a promise // do some stuff let something = await doSomethingElseAsync(); // awaits for a promise // do some stuff return doSomethingElseEntirelyAsync(something); // returns the final promise // Note that even if you return a value, like return 5, the function as a whole // still returns a promise! }
它看起来好多了,你可以使用像try/catch和for循环这样的常规工具来处理它们,即使它们是异步的.
异步函数不是 promises的替代品,它们在它们之上是糖,用于处理具有许多顺序异步操作的特定情况.
因为await
基本上只是"等待这个承诺",你仍然可以使用类似Promise.all()
和的酷聚合方法,Promise.race()
并等待几个(或几个)承诺的结果.
我不熟悉在运行时区分这两者的方法,因为像类一样,异步函数只是Promise之上的糖.(虽然可能有像使用函数.toString
和解析结果的黑客,但我不计算那些).