Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于与同步iterables一起等待…的_Javascript_Async Await - Fatal编程技术网

Javascript 用于与同步iterables一起等待…的

Javascript 用于与同步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的MDN
有两个用例:

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中的同步迭代器 发电机<代码>对于等待
循环,如果用户 防守上也有这样的圈套,认为他们可能是 获取异步迭代器

我认为打破所有这些相似之处将是一件大事。信息技术 会使异步迭代器不那么符合人体工程学。我们来讨论一下