Sha*_*awn 1 javascript generator promise async-await
async/await函数的目的是简化同步使用promises的行为,并对一组Promises执行某些行为.就像Promise类似于结构化回调一样,async/await类似于组合生成器和promise.
我理解async/await,generator和promise的基本概念.但是,我并不完全理解async/await类似于组合生成器和promise的含义.
那么异步/等待简化了生成器和承诺可以一起做什么?任何例子?
你是对的.首先使用生成器和promises的示例:
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
Run Code Online (Sandbox Code Playgroud)
这个生成器产生一个Promise
外部世界,我们通过将它作为参数传递回生成器的值iterator.next
,一旦该承诺结算,它就会返回到生成器中.
这种模式至少与所谓的任务相交.这样做的缺点是next
,每次产生的promise都会解析时,我们必须在迭代器上手动调用.那是async await
进来的地方:
async function task() {
const promiseValue = await new Promise((resolve) => resolve(42));
console.log(promiseValue);
}
Run Code Online (Sandbox Code Playgroud)
这就是它的全部内容.异步函数将暂停,直到await
关键字结束前面的promise表达式,并且表达式将评估为promise 的自动解包 - 即其最终值.
然后await表达式的结果(42
在我们的例子中)将被分配给promiseValue
,就像yield
作品一样.这一切都发生在函数继续执行到下一个语句之前.
这与上面使用生成器的片段基本上是相同的行为.
虽然根据我的经验,这个例子似乎是发生器和异步函数最常见的用例,其中async/await肯定是更清洁的方法,但是生成器确实具有一些非常强大的功能,async/await没有相同的功能方式(但这是另一个话题).
归档时间: |
|
查看次数: |
1087 次 |
最近记录: |