在Meteor.method调用中插入后无法检索_id

时间:2014-12-07 14:51:36

标签: mongodb meteor

我无法使用我在同一问题上找到的答案来获取插入的_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}
        )
    }
})

1 个答案:

答案 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