在meteor中运行以下(简化)代码时,我遇到了意外行为:
import { HTTP } from 'meteor/http';
Fiber = Npm.require('fibers');
let x = {};
Fiber(function() {
x.a = 1;
let result = HTTP.get('https://jsonplaceholder.typicode.com/posts/1');
x.a = 2;
console.log('fiber finished!');
}).run();
console.log(x);
输出:
{ a: 1 }
fiber finished!
HTTP.get根据它documentation(应该是)同步的。我尝试使用另一个库而不是meteor / http,但得到了相同的结果。
似乎光纤内的执行在到达HTTP请求时停止并继续在光纤外部。只有在纤维外部完成后,它才会返回完成纤维内部的纤维。
发生了什么?如果没有此上下文切换,如何在光纤内发出HTTP请求?