问题标签 [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.
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
使用才能使其工作?
meteor - 如何在 Meteor 中并行执行数据库查询?
收藏:
代码:
但我希望 findOne 查询并行发送。
javascript - 在 Meteor.js 中调用同步函数
当你在 Meteor 服务器上调用同步函数时,它是否会阻塞整个服务器,直到收到回调?
换句话说,如果回调需要 10 秒才能返回,这是否意味着服务器在 10 秒内不能做任何其他事情?
node.js - Node.js、Synchronize.js 和返回值
我正在使用这个美妙的同步模块 synchronize.js - http://alexeypetrushin.github.io/synchronize/docs/index.html。
我遇到了一种情况,我必须将同步函数的返回值放入光纤之外的范围内。这是我正在谈论的一个基本示例:
而records
理论上,将包含results
来自光纤范围内的值。我一直在阅读期货(纤维/期货模块)以及如何在这种情况下使用它们,但我还没有想出任何接近工作的东西。我想要一些方向和/或解决方案。
编辑:
有关我希望完成的更详尽的示例:
正如您在此处看到的,我想要完成的是results
从光纤的作用域中获取主作用域中的值。
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 语句的调用堆栈:
这个致命错误不会出现在Release
node 的版本中。然而,它似乎巧妙地破坏了 V8 引擎,并最终在一段随机代码中失败了一点。
现在,我想出的唯一解决方法是泄漏光纤,这样这段代码就不会被命中。我是在做一些特别错误的事情还是这是一个错误fibers
?
javascript - 如何解决此错误:错误:没有光纤就无法等待?
从使用 Fiber 到 Meteor.bindEnvironment,我已经尝试了几乎所有我能想到的东西。无论我采用哪种编码方式,都会出现某种光纤错误,或者变量正在被重置。
我的第一次尝试:我尝试将代码包装在纤维中:
我第二次尝试使用绑定环境:
第一次尝试有各种各样的问题。变量 bool 总是被重置为 true,即使它被设置为 false,break 语句也不起作用,有时 item.title 是未定义的。
第二次尝试我得到一个错误,因为var lastFeedInserted = Feeds.findOne();
不在光纤中。
我基本上需要找到最后插入的提要,并循环访问items.title
以确保标题不完全相同。换言之,提要尚未保存在数据库中。因此,当我在 while 循环中循环时, 的值不lastFeedInserted
应该改变。如果最后一个lastFeedInserted.title
和item.title
完全相同,那么我需要跳出循环。
我怎样才能使这项工作?
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 包。
node.js - 使用 Fibers 的远程方法上的 Meteor EADDRINUSE 异常
下面是我在 server/server.js 文件中的代码。当我打电话时,Meteor.apply('testMethod')
我得到Error: listen EADDRINUSE
. 我正在用陨石运行流星应用程序,安装的唯一非通用包是npm
我知道这里最明显的解决方案是在光纤周围使用 Meteor 的包装器,但我真正想要实现的是在异步调用上从光纤产生,然后在某个事件处理程序中恢复。而且我还没有找到任何适合的东西。
堆栈跟踪:
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 ({})
我哪里出错了?
重现错误的示例:
javascript - 如何将此上下文绑定到 Fiber?
我目前正在试用 M Laverdet 节点光纤,我非常喜欢它。但是我遇到了范围问题,希望有人可以帮助我了解发生了什么。
如何为 Fiber 执行“bind()”?