Javascript 用于与同步iterables一起等待…的
用于wait…of的MDNJavascript 用于与同步iterables一起等待…的,javascript,async-await,Javascript,Async Await,用于wait…of的MDN有两个用例: wait…of语句的创建了一个在异步上迭代的循环 iterable对象以及同步iterables 我以前知道前者:使用Symbol.asyncierator的异步iterables。但我现在对后者感兴趣:同步可重用性 下面的代码迭代一个同步iterable—一个承诺数组。它似乎阻碍了每个承诺的实现 async函数async函数(){ 试一试{ const happy=新承诺((解析)=>setTimeout(()=>resolve('happy'),10
有两个用例:
wait…of
语句的创建了一个在异步上迭代的循环
iterable对象以及同步iterables
我以前知道前者:使用Symbol.asyncierator
的异步iterables。但我现在对后者感兴趣:同步可重用性
下面的代码迭代一个同步iterable—一个承诺数组。它似乎阻碍了每个承诺的实现
async函数async函数(){
试一试{
const happy=新承诺((解析)=>setTimeout(()=>resolve('happy'),1000))
const sad=new Promise((uu,reject)=>setTimeout(()=>reject('sad'))
康斯特承诺=[快乐,悲伤]
等待(持续承诺项目){
console.log(项目)
}
}捕捉(错误){
log(`发生错误:`,err)
}
}
asyncFunction()/“happy,发生了一个错误:sad”(快速连续打印,大约5秒后)
当sad
承诺失败时,它没有被wait
拒绝-代码需要等待happy
完成,然后才能开始等待sad
。sad
承诺在happy
解决之前就失败了。(Promise.all
是一个更适合此用例的工具)当sad
承诺失败时,它不会被wait
等待-代码需要等待happy
之后才能开始等待sad
。sad
承诺在happy
解决之前就失败了。(Promise.all
是一个更适合此用例的工具)是的,这很奇怪,您不应该这样做。不要重复承诺的数组,这会导致错误。(另见。)
那么,为什么语言支持这一点呢?继续使用草率的承诺语义
您可以在以下内容中找到确切的理由:
我认为我们应该回到Symbol.iterator
,因为我们当前的
承诺语义都是关于允许将同步内容用作
异步的东西。你可以称之为“草率”。接下来
,
但我只想更详细地解释这些相似之处
的“链接”语义就是关于这一点的。你可以退票
来自的承诺。然后或标量值;都一样。你打电话
承诺。下定决心
不要用承诺来包装某件事,而要用承诺来表达
承诺的东西——当你有
什么的
async
和await
的语义也都是草率的。
可以对异步函数中的任何非承诺表达式使用wait
一切都很好,完全一样,只是你屈服了
控件添加到作业队列。类似地,您可以“防御地”将async
无论你想要什么,只要你等待结果。如果你有
一个返回承诺的函数——不管怎样!你可以做一个
async
函数,并且从用户的角度来看,没有任何变化(甚至
如果,从技术上讲,你得到了一个不同的承诺对象)
异步迭代器和生成器的工作方式应该相同。就像你一样
可以等待一个值,意外地,不是一个承诺,一个合理的
用户希望能够yield*
async中的同步迭代器
发电机<代码>对于等待
循环,如果用户
防守上也有这样的圈套,认为他们可能是
获取异步迭代器
我认为打破所有这些相似之处将是一件大事。信息技术
会使异步迭代器不那么符合人体工程学。让我们下次再讨论这个问题
时间异步生成器/迭代器出现在TC39的议程上
是的,这很奇怪,你不应该这样做。不要重复承诺的数组,这会导致错误。(另见。)
那么,为什么语言支持这一点呢?继续使用草率的承诺语义
您可以在以下内容中找到确切的理由:
我认为我们应该回到Symbol.iterator
,因为我们当前的
承诺语义都是关于允许将同步内容用作
异步的东西。你可以称之为“草率”。接下来
,
但我只想更详细地解释这些相似之处
的“链接”语义就是关于这一点的。你可以退票
来自的承诺。然后或标量值;都一样。你打电话
承诺。下定决心
不要用承诺来包装某件事,而要用承诺来表达
承诺的东西——当你有
什么的
async
和await
的语义也都是草率的。
可以对异步函数中的任何非承诺表达式使用wait
一切都很好,完全一样,只是你屈服了
控件添加到作业队列。类似地,您可以“防御地”将async
无论你想要什么,只要你等待结果。如果你有
一个返回承诺的函数——不管怎样!你可以做一个
async
函数,并且从用户的角度来看,没有任何变化(甚至
如果,从技术上讲,你得到了一个不同的承诺对象)
异步迭代器和生成器的工作方式应该相同。就像你一样
可以等待一个值,意外地,不是一个承诺,一个合理的
用户希望能够yield*
async中的同步迭代器
发电机<代码>对于等待
循环,如果用户
防守上也有这样的圈套,认为他们可能是
获取异步迭代器
我认为打破所有这些相似之处将是一件大事。信息技术
会使异步迭代器不那么符合人体工程学。我们来讨论一下