node.js - proyecto - ''El código de Meteor siempre debe ejecutarse dentro de un error de Fiber'' cuando se utiliza el paquete de NPM
npm install (1)
Estoy usando Meteor.require(''npmPackage'')
para usar un paquete de NPM. Sin embargo, parece que recibo un error al escribir en mongo en la función de devolución de llamada del paquete npm.
Error:
Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.
Código
npmPackage.getInfo(function(err, data) {
UserSession.insert({
key: ''info'',
value: data
});
console.log(data);
});
Traté de envolver el código dentro de Fiber pero aún se muestra el mismo mensaje de error:
Fiber(function() {
npmPackage.getInfo(function(err, data) {
UserSession.insert({
key: ''info'',
value: data
});
console.log(data);
});
}).run();
Pregunta: ¿Cómo se debe Meteor.bindEnvironment
para que esto funcione?
Intenta usar wrapAsync
por ej.
npmPackage.getInfoSync = Meteor._wrapAsync(npmPackage.getInfo.bind(npmPackage));
var data = npmPackage.getInfoSync();
UserSession.insert({
key: ''info'',
value: data
});
Puede agregar parámetros a npmPackage.getInfoSync()
si lo desea (si toma alguno).
La cuestión es que la devolución de llamada debe estar en una fibra que es de donde proviene el error. La mejor manera de hacerlo es con Meteor.bindEnvironment
. Meteor._wrapAsync
hace esto por usted y hace que el código sea sincrónico. Que es aún mejor :)
Meteor._wrapAsync es un método no documentado que incluye un método cuyo último parámetro es una devolución de llamada con el primer parámetro como error
y el segundo como result
. Al igual que su devolución de llamada.
A continuación, ajusta la devolución de llamada en Meteor.bindEnvironment
y lo espera, y luego devuelve el valor de forma sincrónica.