我了解到,当我们调用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/