Ho bisogno di scrivere alcuni moduli che caricano i dati una volta e quindi forniscono un'interfaccia per quei dati. Mi piacerebbe caricare i dati in modo asincrono. La mia applicazione usa già delle promesse. Fornire una promessa come il risultato di richiedere a un modulo un modello/idioma valido?Fornisce una Promessa come esportazione di un modulo un modello valido per l'inizializzazione asynch in Node.js?
Esempio Modulo:
var DB = require('promise-based-db-module');
module.exports =
DB.fetch('foo')
.then(function(foo){
return {
getId: function(){return foo.id;},
getName: function(){return foo.name;}
};
});
Esempio di utilizzo:
require('./myPromiseModule')
.then(function(dataInterface){
// Use the data
});
UPDATE:
Ho usato questo per un po 'di tempo e funziona benissimo. Una cosa che ho imparato, ed è accennata nella risposta accettata, è che è bene mettere in cache la promessa stessa, e ogni volta che si desidera accedere ai dati utilizzare next
. La prima volta che si accede ai dati, il codice attenderà fino alla risoluzione della promessa. L'utilizzo successivo di next
restituirà immediatamente i dati. per esempio.
var cachedPromise = require('./myPromiseModule');
cachedPromise.then(function(dataInterface){
// Use the data
});
...
cachedPromise.then(function(dataInterface){
// Use the data again somewhere else.
});
Sembra che funzionerebbe bene per me. – jfriend00
Sì, sembra perfettamente a posto. Se si stanno utilizzando i moduli ES6, si potrebbe persino essere in grado di utilizzare un caricatore di moduli promettente e "importare" in modo sincrono ". – Bergi
La risposta seguente ha risolto il problema? In tal caso, contrassegnare la risposta migliore come risposta accettata selezionando il segno di spunta verde a sinistra di tale risposta per indicare alla comunità che la tua domanda ha avuto risposta e quindi sia tu che la persona che ha fornito la risposta guadagnerai alcuni punti reputazione questo può portare a maggiori privilegi qui su StackOverflow. – jfriend00