0

好的,我正在学习光纤,但我不知道如何实现“等待光纤内的循环结束”

现在我有了这段代码,没有问题。

        if (Meteor.isServer) {

        function checkIfIOwnThisItem(callback) {
           setTimeout(function() {
                callback("this callback");
            }, 500);
        }           

        var f = Fiber(function() {
            var fiber = Fiber.current;

            checkIfIOwnThisItem(function(str) {
                fiber.run(str);
            });

            str = Fiber.yield();
            console.log(str);
        });

        f.run();

    }

我需要更换setTimeout ... FOR ...

        _.each(myBank.items,function(loopItem,key,list){
        if (loopItem.itemId == item.itemId) {
            ownItem = true;
            countOfOwnItemInBank = parseInt(loopItem.number);
        }
    }); 

重点是首先检查我是否已经拥有项目(自己的项目是真的)然后我可以做任何我想做的事情,但我需要确保 ownItem 是真的

4

2 回答 2

0

听起来你是从一些关于桌面编程中的纤维/线程的记忆开始的,并试图映射一个精确的等价物。我记得那个世界。不要那样想。纤维更多的是关于不等待随时可能出现的答案。

我敢打赌,如果你采取更小的步骤,更少的思考,只需要一些 HTML/js 来做你想做的事情,然后当你遇到障碍时回到这里,你就会取得进步。

例如,项目的所有权通常由文档中的字段表示,ownerid,匹配当前 userid

于 2013-09-04T20:32:01.720 回答
0
Fiber(function() {
  _.each(myBank.items,function(loopItem,key,list){
    if (loopItem.itemId == item.itemId) {
        ownItem = true;
        countOfOwnItemInBank = parseInt(loopItem.number);
    }
  }); 
}).run();

此代码应该同步工作。

于 2013-09-05T14:48:42.540 回答