javascript - 如果执行异步操作,yield 表达式会阻塞吗?

标签 javascript generator yield

我了解到,当我们调用next()时,代码将继续运行直到yield关键字,并且next()返回将保存该值。我的问题是,如果yield表达式正在执行异步操作,例如执行文件io或http请求,并且在异步调用完成之前,我们调用next,是即使异步操作还没有完成,代码仍然会阻塞,或者立即恢复运行?为什么?

function * generator(){
  yield http.get('http://google.com');
  yield http.get('http://yahoo.com');
}
var gen = generator();
var a = gen.next();
var b = gen.next(); 

如果 google.com 的请求尚未完成,yahoo.com 的请求是否会立即发送?或者它必须阻止并等待谷歌的请求完成?

最佳答案

如果您使用的“get”方法是异步,它将立即返回(非阻塞)。这意味着即使 google.com 尚未完成,也会发送 yahoo.com 的请求。

关于javascript - 如果执行异步操作,yield 表达式会阻塞吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25461077/

相关文章:

php - 为什么 'yield' 不会覆盖 PHP 中的键值对?

javascript - ES6生成器中如何将第一个yield的值传递到下一个yield?

javascript - 如何确保带有promise的函数继续执行

javascript - 在 HTML5 视频中突出显示播放器搜索栏

javascript - 通过jquery一起提交表单和变量

javascript - 为什么我的生成器在迭代后变空了?

java - 如果不超过 12 个字符的限制,则匹配随机选择的 2 个字符串?

javascript - 使用正则表达式替换以 @ 开头的子字符串

python - 我的Python生成器函数真的很懒吗?

python - 如何在 yield 中扩展元组?