问题标签 [node-fibers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2447 浏览

node.js - 使用 NPM 包时出现“Meteor 代码必须始终在 Fiber 内运行”错误

我正在使用Meteor.require('npmPackage')NPM 包。但是,在 npm 包的回调函数中写入 mongo 时,我似乎遇到了错误。

错误:

Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.

代码

我尝试将代码包装在 Fiber 中,但仍然显示相同的错误消息:

问题:应该如何Meteor.bindEnvironment使用才能使其工作?

0 投票
2 回答
98 浏览

meteor - 如何在 Meteor 中并行执行数据库查询?

收藏:

代码:

但我希望 findOne 查询并行发送。

0 投票
1 回答
741 浏览

javascript - 在 Meteor.js 中调用同步函数

当你在 Meteor 服务器上调用同步函数时,它是否会阻塞整个服务器,直到收到回调?

换句话说,如果回调需要 10 秒才能返回,这是否意味着服务器在 10 秒内不能做任何其他事情?

0 投票
2 回答
1877 浏览

node.js - Node.js、Synchronize.js 和返回值

我正在使用这个美妙的同步模块 synchronize.js - http://alexeypetrushin.github.io/synchronize/docs/index.html

我遇到了一种情况,我必须将同步函数的返回值放入光纤之外的范围内。这是我正在谈论的一个基本示例:

records理论上,将包含results来自光纤范围内的值。我一直在阅读期货(纤维/期货模块)以及如何在这种情况下使用它们,但我还没有想出任何接近工作的东西。我想要一些方向和/或解决方案。

编辑:

有关我希望完成的更详尽的示例:

正如您在此处看到的,我想要完成的是results从光纤的作用域中获取主作用域中的值。

0 投票
1 回答
426 浏览

node.js - 在 node.js 中使用 node-fibers 时,V8 在 GC 期间出现“致命错误”

运行以下程序时,我遇到了 V8 报告的致命错误:

用于运行它的命令:

致命错误的文本如下:

我正在使用以下版本:

  • 节点 0.10.25 x86(vcbuild x86 Debug使用 VC2013 构建)
  • node-fibers 1.0.1 取自 GitHub 存储库(不是 npmjs)

断言失败发生在gc()调用下方。fibers这是从 GC 回调回调到 ASSERT 语句的调用堆栈:

这个致命错误不会出现在Releasenode 的版本中。然而,它似乎巧妙地破坏了 V8 引擎,并最终在一段随机代码中失败了一点。

现在,我想出的唯一解决方法是泄漏光纤,这样这段代码就不会被命中。我是在做一些特别错误的事情还是这是一个错误fibers

0 投票
1 回答
945 浏览

javascript - 如何解决此错误:错误:没有光纤就无法等待?

从使用 Fiber 到 Meteor.bindEnvironment,我已经尝试了几乎所有我能想到的东西。无论我采用哪种编码方式,都会出现某种光纤错误,或者变量正在被重置。

我的第一次尝试:我尝试将代码包装在纤维中:

我第二次尝试使用绑定环境:

第一次尝试有各种各样的问题。变量 bool 总是被重置为 true,即使它被设置为 false,break 语句也不起作用,有时 item.title 是未定义的。

第二次尝试我得到一个错误,因为var lastFeedInserted = Feeds.findOne();不在光纤中。

我基本上需要找到最后插入的提要,并循环访问items.title以确保标题不完全相同。换言之,提要尚未保存在数据库中。因此,当我在 while 循环中循环时, 的值不lastFeedInserted应该改变。如果最后一个lastFeedInserted.titleitem.title完全相同,那么我需要跳出循环。

我怎样才能使这项工作?

0 投票
10 回答
143087 浏览

javascript - 如何将异步函数调用包装到 Node.js 或 Javascript 中的同步函数中?

假设您维护一个公开函数的库getData。您的用户调用它来获取实际数据:
var output = getData();
在后台数据保存在一个文件中,因此您getData使用 Node.js 内置实现fs.readFileSync。很明显,两者getData都是fs.readFileSync同步功能。有一天,您被告知将底层数据源切换到只能异步访问的存储库,例如 MongoDB。您还被告知要避免激怒您的用户,getData不能将 API 更改为仅返回一个承诺或要求一个回调参数。你如何满足这两个要求?

使用回调/承诺的异步函数是 JavasSript 和 Node.js 的 DNA。任何非平凡的 JS 应用程序都可能渗透着这种编码风格。但这种做法很容易导致所谓的末日回调金字塔。更糟糕的是,如果调用链中任何调用者中的任何代码都依赖于异步函数的结果,那么这些代码也必须包装在回调函数中,从而对调用者施加编码风格约束。有时我发现需要将异步函数(通常在 3rd 方库中提供)封装到同步函数中,以避免大规模的全局重构。寻找关于这个主题的解决方案通常以Node Fibers告终或从它派生的 npm 包。但是 Fibers 无法解决我面临的问题。即使是 Fibers 的作者提供的示例也说明了这一缺陷:

实际输出:

如果功能 Fiber 真的将异步功能 sleep 变为同步,则输出应该是:

我在JSFiddle中创建了另一个简单的示例并寻找代码以产生预期的输出。我将接受仅适用于 Node.js 的解决方案,因此尽管不在 JSFiddle 中工作,您仍可以自由地要求任何 npm 包。

0 投票
1 回答
233 浏览

node.js - 使用 Fibers 的远程方法上的 Meteor EADDRINUSE 异常

下面是我在 server/server.js 文件中的代码。当我打电话时,Meteor.apply('testMethod')我得到Error: listen EADDRINUSE. 我正在用陨石运行流星应用程序,安装的唯一非通用包是npm

我知道这里最明显的解决方案是在光纤周围使用 Meteor 的包装器,但我真正想要实现的是在异步调用上从光纤产生,然后在某个事件处理程序中恢复。而且我还没有找到任何适合的东西。

堆栈跟踪:

0 投票
2 回答
5027 浏览

meteor - Meteor.Collection 与 Meteor.bindEnvironment

在 Meteor.binEnvironment 中已经存在的函数中,当我运行时<collection>.find ({}),我会收到错误throw new Error ('Can \' t wait without a fiber '); 如果您将该调用也放在其中Meteor.bindEnvironment(<collection>.find ({})),则错误消息变为:throw new Error (noFiberMessage);

有问题的功能贯穿Meteor.methods ({}) 我哪里出错了?

重现错误的示例:

0 投票
0 回答
73 浏览

javascript - 如何将此上下文绑定到 Fiber?

我目前正在试用 M Laverdet 节点光纤,我非常喜欢它。但是我遇到了范围问题,希望有人可以帮助我了解发生了什么。

如何为 Fiber 执行“bind()”?