2015-01-27 4 views
5

Ich benutze ein benutzerdefiniertes Modell und versuche, es in einer Schleife mit der Methode find zu filtern. z.B. siehe untenSo rufen Sie die model.find-Methode synchron in Node/Loopback auf?

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

Es funktioniert nicht.

Auch wenn ich die folgende

Gibt es eine Möglichkeit Methode synchron zu nennen finden? Bitte helfen Sie.

Dank

+0

Was genau wollen Sie mit der Schleife erreichen? – amenadiel

+0

Versuchen Sie, ein Versprechen zu verwenden. Werfen Sie einen Blick auf: http://howtonode.org/projects – Sid

Antwort

2

dieser Modellmethoden Alle (Abfrage/Aktualisierung von Daten) sind asynchron. Es gibt keine synchronen Versionen. Stattdessen müssen Sie die Callback-Funktion verwenden, die Sie als zweites Argument übergeben:

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

Schön, Ihre Antwort lieferte eine mögliche Erklärung für die Verwendung von model.find() in einer Schleife. Es ist immer noch eine schlechte Idee, IMHO. – amenadiel

3

du die jede Funktion im async package mit lösen können. Beispiel:

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... 
    } 

}); 

Auf diese Weise Ihr Code asynchron ist mit Ausnahme der Callback-Funktion (die Iterator funcions gleichzeitig ausgeführt werden), die ausgeführt wird, wenn alle fertig sind.

würde das Beispiel mit Ihrem Code sein:

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 
    } 

});