Meteor wrapAsync se ejecuta sincrónicamente pero nunca regresa

Estoy tratando de ajustar una function de un package de nodo con wrapAsync.

filepicker = new Filepicker('API Key') filepickerStatSync = Meteor.wrapAsync(filepicker.stat, filepicker) result = filepickerStatSync(url); console.log('after') 

La function estadística está abajo.

Todo parece funcionar bien … la llamada de request responde con el resultado correcto, se llama a la callback final, todo se ejecuta sincrónicamente / cede correctamente por lo que puedo decir … pero la llamada de synchronization nunca regresa y console.log ('después') nunca es golpeado.

No creo haber cometido el mismo error que sucedió en esta pregunta porque mi function tiene una callback como último parámetro.

Tampoco creo que la solución esté en esta pregunta porque la function envuelta termina con llamar a la callback con error y resultado, que supuestamente es lo que Meteor.wrapAsync busca en una firma.

 Filepicker.prototype.stat = function(url, options, callback) { callback = callback || function(){}; if(!options) { options = {}; } if(!url) { callback(new Error('Error: no url given')); return; } request({ method: 'GET', url: url+'/metadata?', form: { size: options.size || true, mimetype: options.mimetype || true, filename: options.filename || true, width: options.width || true, height: options.height || true, writeable: options.writeable || true, md5: options.md5 || true, path: options.path || true, container: options.container || true, security: options.security || {} } }, function(err, res, body) { console.log('err = '+err); console.log('res = '+res); console.log('body = '+body); if(err) { callback(err); return; } var returnJson; if(typeof(body)==='string'){ try { returnJson = JSON.parse(body); } catch(e) { callback(new Error('Unknown response'), null, body); return; } } else { console.log('returnJSON'); returnJson = body; } console.log('callbacked'); callback(null, returnJson); }); }; 

La function que está envolviendo tiene tres arguments, pero solo está proporcionando dos: url e (implícitamente) la function de callback (lo llamaré cb ). Así que internamente, lo que se ejecutará es Filepicker.prototype.stat(url, cb) , es decir, la function de callback cb se interpretará como las options lugar de la callback , y la callback se configurará como una function vacía. Por lo tanto, nunca se llama a la callback de wrapAsync, porque la cadena de callback no funciona.

Esto debería funcionar:

 result = filepickerStatSync(url, {});