1

纤维和赋值运算符的工作很奇怪!似乎将+=运算符与执行暂停的函数一起使用会导致错误。在此示例中,我并行启动 10 个任务,每个任务都添加onesum. 工作完成后,总和应该等于 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();
    }
4

0 回答 0