javascript - Meteor(Fibers)循环和回调

标签 javascript meteor node-fibers

meteor 纤维“同步”模式让我发疯。这是一个简单的代码示例:

var feedsData = feeds.fetch(); // [{_id: "1234"}, {_id: "6789", url: "http://...."}]
for(var i = 0, len = feedsData.length; i < len; i++) {
    var feed = feedsData[i];
    parser.parseURL(feed.url, function(err, out){
        console.log(feed._id, i); // outputs "6789" and "2" each times
    });
}

我不明白如何进行这项工作。循环结束后会调用回调,但 feed 等内部变量应该保留......但它们没有。

解析的网址很好(第一个,然后是第二个),但是我无法更新我的数据,因为我在回调中没有好的_id。

想要的输出是:“1234”“0”和“6789”“1”,而不是两次“6789”“2”...... 你会如何在 Meteor/Fiber 代码中实现这一点?

最佳答案

另一种在“纤维”中做到这一点的方法(它可能比我上面发布的“ future ”的答案更好):

var feedsData = feeds.fetch(); // [{_id: "1234"}, {_id: "6789", url: "http://...."}]
Fiber(function() {
    var fiber = Fiber.current;
    for(var i = 0, len = feedsData.length; i < len; i++) {
        var feed = feedsData[i];
        parser.parseURL(feed.url, function(err, out) {
            console.log(feed._id, i);
            if(err) return fiber.throwInto(err);
            fiber.run();
        });
        Fiber.yield();
        console.log('here', i);
    }
    console.log('there');
}).run();
console.log('and there');

输出将是:

"and there"
"1234" "0"
"here" "0"
"6789" "1"
"here" "1"
"there"

请注意,Fiber 函数中的所有内容都在自己的 Fiber 中执行,就好像它是异步的一样,这就是为什么首先输出“and there”

关于javascript - Meteor(Fibers)循环和回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15632073/

相关文章:

javascript - 替换内置函数的原型(prototype)是否非法?

javascript - 从 obj 数据中以纯 JS 自动完成

javascript - 我应该在网络游戏中使用固定时间步长还是动态时间步长?

javascript - 使用 jQuery 控制 HTML5 <audio> 元素

javascript - 获取与父字段一起分配的所有文档

curl ca-cert 在 Mac 上安装 Meteor 时出错

javascript - 指定 Meteor 包依赖项的正确方法

meteorjs 中的 imagemagick(借助 meteor-router 和 fibers)

Node.js、Synchronize.js 和返回值

meteor - 与光纤模块相关的 Meteor 部署问题