'Codice Meteor deve sempre funzionare all'interno di un errore in fibra quando si utilizza il pacchetto NPM

StackOverflow https://stackoverflow.com//questions/20041177

Domanda

Sto usando Meteor.require('npmPackage') per utilizzare un pacchetto NPM.Comunque mi sembra di ottenere un errore quando scrivo al mongo nella funzione di callback del pacchetto di NPM.

Errore:

Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.

Codice

npmPackage.getInfo(function(err, data) {
    UserSession.insert({
        key: 'info',
        value: data
    });
    console.log(data);
});
.

Ho provato a avvolgere il codice all'interno della fibra ma lo stesso messaggio di errore è ancora visualizzato:

Fiber(function() {

    npmPackage.getInfo(function(err, data) {
        UserSession.insert({
            key: 'info',
            value: data
        });
        console.log(data);
    });

}).run();
.

Domanda: Come dovrebbe essere utilizzato Meteor.bindEnvironment per far funzionare questo?

È stato utile?

Soluzione

Prova a utilizzare wrapAsync E.G

npmPackage.getInfoSync = Meteor._wrapAsync(npmPackage.getInfo.bind(npmPackage));

var data = npmPackage.getInfoSync();

UserSession.insert({
    key: 'info',
    value: data
});
.

È possibile aggiungere parametri in npmPackage.getInfoSync() se vuoi (se ci vuole).

La cosa è che il callback deve essere in fibra che è da dove viene l'errore.Il modo migliore per farlo è con Meteor.bindEnvironment.Meteor._wrapAsync fa questo per te e rende il codice sincrono.Che è ancora meglio :)

meteor._wrapasync è un metodo non documentato che assume un metodo che è l'ultima param è un callback con il primo parametro come error e il secondo come result.Proprio come il tuo callback.

Si avvolge quindi la richiamata in un Meteor.bindEnvironment e attende che quindi restituisca il valore in modo sincrono.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top