2015-01-27 7 views
5

Sto usando un modello personalizzato e sto provando a filtrarlo in un loop usando il metodo find. per esempio. Dato sottoCome chiamare il metodo model.find in modo sincrono nel nodo/loopback?

for i = 0 to n 
{ 
var u = User.find(where { name: 'john'}); 
} 

Non funziona.

Inoltre, se uso il seguente

C'è un modo per chiamare trovare il metodo sincrono? Per favore aiuto.

Grazie

+0

Che cosa esattamente cosa si vuole realizzare con il ciclo? – amenadiel

+0

Prova ad usare una promessa. Dai un'occhiata a: http://howtonode.org/promises – Sid

risposta

2

Tutti questi metodi del modello (interrogazione/aggiornamento dei dati) sono asincrone. Non ci sono versioni sincrone. Invece, è necessario utilizzare la funzione di callback che si passa come secondo argomento:

for (var i = 0; i<n; ++i) { 
    User.find({where: { name: 'john'} }, function(err, users) { 
     // check for errors first... 
     if (err) { 
      // handle the error somehow... 
      return; 
     } 

     // this is where you do any further processing... 
     // for example: 

     if (users[0].lastName === 'smith') { ... } 
    }); 
} 
+0

Bello, la tua risposta ha fornito una possibile spiegazione per l'utilizzo di model.find() all'interno di un ciclo. È ancora una cattiva idea IMHO. – amenadiel

3

È possibile risolvere questo utilizzando la funzione di ogni nel async package. Esempio:

async.each(elements, function(element, callback) { 
    // - Iterator function: This code will be executed for each element - 

    // If there's an error execute the callback with a parameter 
    if(error) 
    { 
     callback('there is an error'); 
     return; 
    } 

    // If the process is ok, execute the callback without any parameter 
    callback(); 

}, function(err) { 
    // - Callback: this code will be executed when all iterator functions have finished or an error occurs 
    if(err) 
     console.log("show error"); 
    else { 

     // Your code continues here... 
    } 

}); 

questo modo il codice è asincrona (i funcions iteratori vengono eseguiti simultaneamente) eccetto la funzione di richiamata che viene eseguito quando tutti hanno finito.

L'esempio con il codice sarebbe:

var elements = [1 .. n]; 

async.each(elements, function(element, callback) { 

    User.find(where { name: 'john'}, function(u) { 

     if(err) 
     { 
      callback(err); 
      return; 
     } 

     // Do things ... 

     callback(); 

    }); 

}, function(err) { 

    if(err) 
     console.log("show error"); 
    else { 

     // continue processing 
    } 

}); 
Problemi correlati