【发布时间】:2016-04-15 02:45:15
【问题描述】:
我无法使用我在同一个问题上找到的答案来获取插入的 _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}
);
}
在transactionInsert 之后立即从客户端调用insertInvoiceItem。我的问题是trxId 是否始终是交易的正确 id,即使成千上万的用户正在使用它,还是其他用户的交易会导致 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}
)
}
})
【问题讨论】:
-
您的原始代码对我来说看起来不错。如果你
console.log(result)inside 回调会发生什么?我怀疑您遇到的问题是theIdYouWant未在回调的外部定义。这是意料之中的,因为它是一个异步函数。请参阅this 示例。 -
奇怪。该值显示在控制台中,而变量仍未定义。所以如果我在模板中使用
theIdYouWant那么它应该可以工作吗?像我现在这样在服务器上将其定义为全局变量有什么问题吗?