流星,访问MongoDB外的光纤 [英] Meteor, access MongoDB outside a fiber
问题描述
我使用Meteor包 tomi:upload-jquery ,它使用光纤之外的回调。在一个回调中我应该使用MongoDB,而MongoDB需要在光纤内部运行。
在未来,光纤,deasync,Meteor.bindEnvironment,Meteor .wrapAsync,aso我找不到解决方案。
要回滚的回调是:
Meteor.startup - >
UploadServer.init
getDirectory:(fileInfo,formData) - >
#开始某种包装
dir =''
u = Meteor.users.findOne({uploadToken.token:formData.uploadToken})
如果u
dir = u.username
else
throw new错误不允许匿名调用
#结束某种包装
console.log'dir',dir
return dir
return
编辑1 b
$ b
这段代码在没有崩溃的情况下运行,但它应该是同步的:
Meteor.startup - >
UploadServer.init
getDirectory:(fileInfo,formData) - >
getDir =(formData,callback) - >
Fiber(() - >
console.log'0:',formData
dir =''
u = Meteor.users.findOne({uploadToken.token: formData.uploadToken})
如果u
dir = u.username
else
回调新错误('匿名文件上传不允许'。),null
控制台。 log'1:',dir
callback null,dir
).run()
dir = getDir(formData,(e,r) - >
console.log' e,r:',e,r
)
console.log'2:',dir
return''
return
$ b在日志中我得到:
I20150905- 08:33:13.171(2)? 0:{uploadToken:'K2eEiFMRMagSuoKqf'}
I20150905-08:33:13.173(2)? 2:undefined
I20150905-08:33:13.174(2)? 0:{uploadToken:'K2eEiFMRMagSuoKqf'}
I20150905-08:33:13.175(2)? 2:undefined
I20150905-08:33:13.177(2)? 1:test
I20150905-08:33:13.177(2)? e,r:null test
I20150905-08:33:13.177(2)? 1:test
I20150905-08:33:13.178(2)? e,r:null test
getDirectory被调用两次。
现在缺少的是如何使代码同步。也就是让
return dir
等待getDir
。
解决方案查看此问题的解决方案:流行包为强大的。
要在Fiber I中执行MongeDB命令在包
tomi:upload-server
中封装事件处理程序。I use the Meteor package tomi:upload-jquery that uses callbacks outside a fiber. Inside one callback I should use MongoDB, and MongoDB requires to be run inside a fiber.
After a lot of attempts with future, fibers, deasync, Meteor.bindEnvironment, Meteor.wrapAsync, a.s.o. I have found no solution.
The callback to be wrappen is:
Meteor.startup -> UploadServer.init getDirectory: (fileInfo, formData) -> # begin some sort of wrapping dir = '' u = Meteor.users.findOne({"uploadToken.token": formData.uploadToken }) if u dir = u.username else throw new Error 'Anonymous calls not permitted' # end some sort of wrapping console.log 'dir', dir return dir return
EDIT 1
This code is working without crashing, but it should become synchronous:
Meteor.startup -> UploadServer.init getDirectory: (fileInfo, formData) -> getDir = (formData,callback) -> Fiber(()-> console.log '0:',formData dir = '' u = Meteor.users.findOne({"uploadToken.token": formData.uploadToken }) if u dir = u.username else callback new Error( 'Anonymous file upload not permitted.' ), null console.log '1:',dir callback null,dir ).run() dir = getDir(formData, (e,r)-> console.log 'e,r:',e,r ) console.log '2:',dir return '' return
In the log I get:
I20150905-08:33:13.171(2)? 0: { uploadToken: 'K2eEiFMRMagSuoKqf' } I20150905-08:33:13.173(2)? 2: undefined I20150905-08:33:13.174(2)? 0: { uploadToken: 'K2eEiFMRMagSuoKqf' } I20150905-08:33:13.175(2)? 2: undefined I20150905-08:33:13.177(2)? 1: test I20150905-08:33:13.177(2)? e,r: null test I20150905-08:33:13.177(2)? 1: test I20150905-08:33:13.178(2)? e,r: null test
getDirectory is called twice.
What is missing now is how to make to code synchronous. That is to let
return dir
wait forgetDir
.Any advice and suggestions will be greatly appreciated.
解决方案See solution to this question: Meteor Package for formidable.
To execute the MongeDB command inside a Fiber I wrapped an event handler in the package
tomi:upload-server
.这篇关于流星,访问MongoDB外的光纤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!