Ответ 1
Попробуйте использовать wrapAsync e.g
npmPackage.getInfoSync = Meteor._wrapAsync(npmPackage.getInfo.bind(npmPackage));
var data = npmPackage.getInfoSync();
UserSession.insert({
key: 'info',
value: data
});
Вы можете добавить params в npmPackage.getInfoSync(), если хотите (если это потребуется).
Дело в том, что обратный вызов должен быть в волокне, из которого возникает ошибка. Лучший способ сделать это - Meteor.bindEnvironment. Meteor._wrapAsync делает это для вас и делает код синхронным. Что еще лучше:)
Meteor._wrapAsync - это недокументированный метод, который принимает метод, последний параметр которого является обратным вызовом с первым параметром как error, а второй - как result. Также как ваш обратный вызов.
Затем он завершает обратный вызов в Meteor.bindEnvironment и ждет его, а затем возвращает значение синхронно.