流星,访问MongoDB外的光纤 [英] Meteor, access MongoDB outside a fiber

查看:243
本文介绍了流星,访问MongoDB外的光纤的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用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 for getDir.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆