Javascript 从光纤内部返回一个值
我试图提供一个集合,它的方法封装在光纤中,用于同步调用Javascript 从光纤内部返回一个值,javascript,node.js,meteor,fibers,node-fibers,Javascript,Node.js,Meteor,Fibers,Node Fibers,我试图提供一个集合,它的方法封装在光纤中,用于同步调用 const Fiber = require('fibers'); const wrapInFiber = require('./wrapInFiber'); let db; Fiber(function () { db = wrapInFiber({ url: global.__MONGO_URI__, config: { useNewUrlParser: true, useUnifiedTopology: true
const Fiber = require('fibers');
const wrapInFiber = require('./wrapInFiber');
let db;
Fiber(function () {
db = wrapInFiber({
url: global.__MONGO_URI__,
config: { useNewUrlParser: true, useUnifiedTopology: true },
databaseName: global.__MONGO_DB_NAME__,
collections: ['users'],
});
console.log('DB', db.users);
}).run();
module.exports.Users = db.users; <-- undefined
虽然我没有解决纤维的问题,但我还是设法解决了最初的问题,这导致了流星收集的中断。只需要一个简单的过程
虽然我没有解决纤维的问题,但我还是设法解决了最初的问题,这导致了流星收集的中断。只需要一个简单的过程
哇,这看起来很复杂。你为什么需要这个?meteor中的DB收集方法已经在光纤中运行,并且是同步的。那么为什么不能直接使用Meteor.users.find()?为什么您需要自己版本的Fibre wrapped DB查询?基本上,我正在尝试为一些Meteor包编写测试,但测试在运行时没有调用包,而是导入文件,因为我们正在尝试从Meteor迁移出去,我不想添加任何Meteor相关代码,因此,我需要删除集合,以便能够调用其方法,如查找、更新等。对于上下文:我需要删除Users集合,以便能够测试角色。getUserRoles例如@HarryAdel有什么原因吗,为什么不使用
Future
类作为?您建议我如何使用它?我试过这样的东西,但没用常量光纤=需要(“光纤”);const Future=需要(“光纤/未来”);const wrapInFiber=require('./wrapInFiber');const fn=未来包裹(包裹纤维);const future=新未来();Fiber(function(){const db=fn({url:global.uu MONGO_URI_uuu,config:{useNewUrlParser:true,useUnifiedTopology:true},databaseName:global.u MONGO_db_uname,collections:['users'],}).wait();return future.return(db.users);}.run();module.exports.Users=未来```哇,这看起来很复杂。你为什么需要这个?meteor中的DB收集方法已经在光纤中运行,并且是同步的。那么为什么不能直接使用Meteor.users.find()?为什么您需要自己版本的Fibre wrapped DB查询?基本上,我正在尝试为一些Meteor包编写测试,但测试在运行时没有调用包,而是导入文件,因为我们正在尝试从Meteor迁移出去,我不想添加任何Meteor相关代码,因此,我需要删除集合,以便能够调用其方法,如查找、更新等。对于上下文:我需要删除Users集合,以便能够测试角色。getUserRoles例如@HarryAdel有什么原因吗,为什么不使用Future
类作为?您建议我如何使用它?我试过这样的东西,但没用常量光纤=需要(“光纤”);const Future=需要(“光纤/未来”);const wrapInFiber=require('./wrapInFiber');const fn=未来包裹(包裹纤维);const future=新未来();Fiber(function(){const db=fn({url:global.uu MONGO_URI_uuu,config:{useNewUrlParser:true,useUnifiedTopology:true},databaseName:global.u MONGO_db_uname,collections:['users'],}).wait();return future.return(db.users);}.run();module.exports.Users=未来```
const Fiber = require('fibers');
const { MongoClient } = require('mongodb');
module.exports = function ({ url, config, databaseName, collections }) {
const Collection = function (db, name) {
this.collection = db.collection(name);
};
Collection.prototype.count = function (query, options) {
query = query || {};
options = options || {};
const fiber = Fiber.current;
this.collection.count(query, options, function (err, records) {
fiber.run(records);
});
return Fiber.yield();
};
Collection.prototype.find = function (query, options) {
query = query || {};
options = options || {};
const fiber = Fiber.current;
this.collection.find(query, options).toArray(function (err, records) {
fiber.run(records);
});
return Fiber.yield();
};
Collection.prototype.findOne = function (query, options) {
return this.find(query, options)[0];
};
Collection.prototype.update = function (query, options) {
const fiber = Fiber.current;
this.collection.update(query, options, function (err, records) {
fiber.run(records);
});
return Fiber.yield();
};
Collection.prototype.insert = function (document) {
const fiber = Fiber.current;
this.collection.insert(document, function (err, records) {
fiber.run(records);
});
return Fiber.yield();
};
Collection.prototype.remove = function (document) {
const fiber = Fiber.current;
this.collection.remove(document, function (err, records) {
fiber.run(records);
});
return Fiber.yield();
};
const fiber = Fiber.current;
MongoClient.connect(url, config, function (err, connection) {
const obj = {
close() {
connection.close();
},
};
const db = connection.db(databaseName);
collections.forEach(function (collectionName) {
obj[collectionName] = new Collection(db, collectionName);
});
fiber.run(obj);
});
return Fiber.yield();
};
const sinon = require('sinon');
require('sinon-mongo');
const Users = sinon.mongo.collection({
findOne: sinon
.stub()
.withArgs({ _id: 'user' }, { fields: { roles: 1 } })
.returns({ _id: 'user', roles: [] }),
});
module.exports.Users = Users;