我无法使用我在同一问题上找到的答案来获取插入的_id的返回值;
Meteor.call('saveDocument', value1, value2, function(error, result){
var theIdYouWant = result;
});
并在服务器上;
saveDocument: function (value1, value2) {
return MyCollection.insert({ 'value1': value1, 'valu2': value2});
}
答案是从2013年5月开始的,所以我不知道这是不是孤独的正确方法错误和结果总是未定义的。但是我可以通过将它保存在服务器上来实现它的工作;
'transactionInsert': function(currentUserId, trx_num, other_stuff){
trxId = trx.insert ({
"userID": currentUserId,
"trx_num": trx_num,
... other stuff ...
});
},
'insertInvoiceItem': function(currentUserId, invoiceNum){
invoiceItems.insert(
{"userID": currentUserId,
"invoice_num": invoiceNum,
"trx_id": trxId}
);
}
在insertInvoiceItem
之后立即调用客户端transactionInsert
。我的问题是,即使成千上万的用户正在使用此问题,或者其他用户交易是否会导致ID不正确,trxId
始终是交易的正确ID?
更新
我错了,仍然没有工作。这就是我现在所处的位置;
Meteor.call('transactionInsert', Meteor.userId(), trx_num,
function(error, result){
console.log(Session.get("trxId")); // p2YrLTiypiMm4tKma appears AFTER undefined in the console
Session.set("trxId",result);
});
console.log("trxId is " + Session.get("trxId")); // undefined
Meteor.call('insertInvoiceItem', Meteor.userId(), invoiceNum, Session.get("trxId")
Template.writeInvoice.helpers({
trxId: function() {
return Session.get("trxId");
}
})
在服务器上;
Meteor.methods({
'transactionInsert': function(currentUserId, trx_num){
return trx.insert ({
"userID": currentUserId,
"trx_num": trx_num
})
},
'insertInvoiceItem': function(currentUserId, invoiceNum, trxId){
invoiceItems.insert(
{"userID": currentUserId,
"invoice_num": invoiceNum,
"trx_id": trxId}
)
}
})
答案 0 :(得分:1)
正如大卫韦尔登所说,这可能只是一个范围问题。您的变量在回调之外不存在。尝试定义它:
var id;
Meteor.call('saveDocument', value1, value2, function(error, result){
id = result;
});
//Do stuff with the id...
或者如果你在反应计算中需要它(比如模板):
var id = new ReactiveVar(); //meteor add reactive-var
Meteor.call('saveDocument', value1, value2, function(error, result){
id.set(result);
});
//Use id.get() where you need it