Написание / преобразование метеорных синхронных функций
Это беспокоило меня какое-то время, поэтому я подумал, что просто проведу быстрый тест на это:
Если у вас есть нормальный модуль nodeJS или что-то еще, и у него есть асинхронная функция на стороне сервера. Как мне сделать это синхронно. Например, как бы я преобразовал nodejs fs.stat
асинхронная функция к синхронной.
например, у меня есть
серверная часть js
Meteor.methods({
getStat:function() {
fs.stat('/tmp/hello', function (err, result) {
if (err) throw err;
console.log(result)
});
}
});
Если я позвоню от клиента, я вернусь undefined
как мой результат, потому что результат в обратном вызове.
1 ответ
Существует функция (недокументированная), которая называется Meteor.wrapAsync
,
Просто оберните функцию
Meteor.methods({
getStat:function() {
var getStat = Meteor._wrapAsync(fs.stat);
return getStat('/tmp/hello');
}
});
Теперь вы получите результат этого в result
вашей Meteor.call
, Вы можете преобразовать любую асинхронную функцию с обратным вызовом, где первый параметр является ошибкой, а второй - результатом.