我使用Meteor软件包 tomi:upload-jquery ,它使用光纤外部的回调。在一个回调中,我应该使用MongoDB,而MongoDB需要在光纤内运行。
经过大量未来尝试,光纤,deasync,Meteor.bindEnvironment,Meteor.wrapAsync,a.s.o。我找不到解决办法。
要回滚的回调是:
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
编辑1
此代码正在运行而不会崩溃,但它应该变为同步:
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
在日志中我得到:
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
。
非常感谢任何建议和意见。
答案 0 :(得分:0)
请参阅此问题的解决方案:Meteor Package for formidable。
要在光纤内执行MongeDB命令,我在包tomi:upload-server
中包装了一个事件处理程序。