2015-12-15 2 views
2

Почему, если я пишу это:Meteor.call обратного вызова не выполняется, и это молча игнорируется, если я не делаю выборку

/client/Items.js

Template.Items.onCreated(function() { 
    console.log('Methor.call'); 
    Meteor.call('Items.findAll', function (err, resp) { 
    console.log('Methor.call callback'); 
    // Here I will use resp expecting it contains the response 
    // returned by the method 
    // ... 
    return; 
    }); 
    return; 
}); 

/ItemsMethods.js

Meteor.methods({ 
    'Items.findAll': function() { 
    return Items.find({}); 
    } 
}); 

функции обратного вызова молча игнорируется, т. е. не выполняется, и я не получаю никаких ошибок?

Обратите внимание, что если я заменил это return Items.find({}); на это return Items.find({}).fetch();, все будет работать должным образом.

ответ

2

Если вы возвращаете курсор в Meteor method, обратный вызов не будет вызываться, потому что курсоры не являются сериализуемыми. Как указано в documentation, методы Meteor должны возвращать значение EJSON или исключать исключение.

Фактически есть feature request on GitHub, который описывает эту проблему более подробно.

+1

Спасибо. Теперь я понимаю. Я надеюсь, что в будущем для этих случаев будет выбрано исключение (по крайней мере, серверная сторона). – Andrea

0

Items.find({}); верните курсор, который является своего рода указателем на извлеченные данные.

Если вы используете Items.find({}).fetch();, вы возвращаете массив объектов.

+0

Спасибо за разъяснение. Я все еще не понимаю, почему в первом случае обратный вызов Meteor.call не выполняется? Связано ли это с типом данных, возвращаемым методом? – Andrea

 Смежные вопросы

  • Нет связанных вопросов^_^