我有以下异步Meteor方法。但是,createItem()
不会在返回之前等待Items.insert
的回调。
# Relevant pieces shown here (coffeescript, more parens than usual for js folks :-)
Meteor.methods(
createItem : (doc, callback)->
asyncInsert = Meteor.wrapAsync( Items.insert, Items )
results = asyncInsert( doc, (err, result) ->
return callback(err, result)
)
return results
)
asyncMeteorCall = Meteor.wrapAsync( Meteor.call )
status = asyncMeteorCall( "createItem", {name:"some item"}, (err, result)->
if err?
return "Error adding Item"
else
return "Successfully added Item"
)
console.log( status ) # prints : undefined
我确实找到了这个possibly related issue,但不确定它是否相关,我实际上是在服务器上执行上述所有操作。
答案 0 :(得分:2)
接受回调的所有Mongo.Collection方法在服务器上调用时会自动同步运行(只要省略回调),因此不需要包装它们。您应该可以直接致电Items.insert()
。
来自Meteor docs:
“在服务器上,如果您不提供回调,则插入块直到数据库确认写入,或者如果出现错误则抛出异常。”