纤维和赋值运算符的工作很奇怪!似乎将+=
运算符与执行暂停的函数一起使用会导致错误。在此示例中,我并行启动 10 个任务,每个任务都添加one
到sum
. 工作完成后,总和应该等于 10,但我得到 1。
更奇怪的是:如果我替换sum += getOne();
为var one = getOne(); sum += one;
,它可以工作!
"use strict";
var Fiber = require("fibers");
// returns 1 after a pause of 100ms
var getOne = function() {
var fiber = Fiber.current;
// sleep 100ms
setTimeout(function() {
fiber.run();
}, 100);
Fiber.yield();
return 1;
};
var bug = true; // change to test
var sum = 0;
var done = 0;
var n = 10;
var i;
for (i=0; i<n; i++) {
Fiber(function() {
if (bug) {
// bug!
sum += getOne();
}
else {
// no bug
var one = getOne();
sum += one;
}
if (++done === n) {
console.log("sum = " + sum);
}
}).run();
}