![](/img/trans.png)
[英]Understanding Async Control Flow with Promises, Generators and Async/Await
[英]async/await vs combining generators and promises?
异步/等待功能的目的是简化同步使用Promise的行为,并对一组Promises执行某些行为。 就像Promises类似于结构化回调一样,异步/等待类似于组合生成器和Promise。
我了解异步/等待,生成器和承诺的基本概念。 但是,我不完全理解说async / await类似于组合生成器和Promise意味着什么。
那么异步/等待简化了生成器和Promise可以一起做什么? 有什么例子吗?
你是对的。 一个带有生成器并首先承诺的示例:
function *gen () {
const promiseValue = yield new Promise((resolve) => resolve(42));
console.log(promiseValue);
}
// .. and at some other context using '*gen'
const iterator = gen();
const { value: promise } = iterator.next(); // Promise (42)
promise.then((resolvedValue) => iterator.next(resolvedValue)); // logs 42
此生成器向外界产生一个Promise
,一旦诺言解决,我们便通过将其值传递给iterator.next
调用的参数,将其值传递回生成iterator.next
。
这种模式至少与所谓的任务相交。 这样做的缺点是,每次产生承诺时,我们都必须在迭代器上手动调用next
。 那就是async await
的地方:
async function task() {
const promiseValue = await new Promise((resolve) => resolve(42));
console.log(promiseValue);
}
这就是全部。 异步函数将暂停,直到由await
关键字开头的promise表达式解析为止,并且该表达式将求值以自动解开promise-即其最终值。
然后将await表达式的结果(在我们的示例中为42
)分配给promiseValue
,就像yield
一样。 这一切都发生在函数继续执行下一条语句之前。
这与上面的生成器片段基本上是相同的行为。
尽管以我的经验来看,此示例似乎是生成器和异步函数的最常见用例,但在这种情况下,异步/等待绝对是更清洁的方法,但生成器确实具有异步/等待所没有的强大功能。方式(但这是另一个主题)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.