2013-05-08 30 views
23

Tôi cần truy xuất _id sau khi chèn tài liệu.Truy xuất _id sau khi chèn vào lệnh gọi Meteor.method

Trong client:

Meteor.call('saveDocument', value1, value2); 

Trong máy chủ

saveDocument: function (value1, value2) { 
    MyCollection.insert({ 'value1': value1, 'value2': value2}); 
} 

Tôi đã thử với các hàm callback của chèn ở phía máy chủ. Bằng cách này, tôi có thể nhận _id của tài liệu, nhưng bên trong hàm callback và điều này không thể trở về cuộc gọi của khách hàng:

saveDocument: function (value1, value2) { 
    MyCollection.insert({ 'value1': value1, 'valu2': value2}, 
     function(err, docsInserted){ console.log(docsInserted) }); 
     //Works, but docsInserted can't return to the client. 
} 

Trả lời

37

cuộc gọi khách hàng của bạn nên sử dụng async phong cách - từ các tài liệu

Trên máy khách, nếu bạn không vượt qua một cuộc gọi lại và bạn không ở trong một nhánh, cuộc gọi sẽ trả về không xác định, và bạn sẽ không có cách nào để lấy giá trị trả về của phương thức.

Meteor.call('saveDocument', value1, value2, function(error, result){ 
    var theIdYouWant = result; 
}); 

sau đó bạn chỉ trả lại id từ phương pháp

saveDocument: function (value1, value2) { 
    return MyCollection.insert({ 'value1': value1, 'valu2': value2}); 
} 

cho biện pháp tốt cho một lần giao cho những 2 phần của các tài liệu

http://docs.meteor.com/#meteor_call

http://docs.meteor.com/#insert

+3

Tôi đã phải rite nó như thế cho nó hoạt động: 'saveDocument: function (value1, value2) { var newDoc = MyCollection.insert ({'value1': value1, 'valu2': value2}); return newDoc; } ' – eloone

+1

Tuyệt vời, cảm ơn bạn. Lời giải thích tuyệt vời. – Andy

Các vấn đề liên quan