2017-01-10 2 views
0

Ich verwende node.js und async mit sails.js framework. Ich versuche, eine Funktion zu erstellen, die einige asynchrone DB-Vorgänge für ein Array von Daten ausführt, aber ich habe Probleme, herauszufinden, auf einfache Weise die Ergebnisse von Async an die übergeordnete Funktion zurückzugeben. Hier ist mein Code:Async in einer anderen Funktion verwenden

convertProductfields: function (articlesFromAurelia){ 

    async.each(articlesFromAurelia, function (post, cb) { 
     Categories.find({name: post.Categoria}) 
     .then(function(category){ 

      post.cat_id = category[0].cat_id;    
      cb(); 
     }) 
     .fail(function(error){ 
      cb(error); 
     }) 
    }, function(error){ 
     if(error) return res.negotiate(error); 

     sails.log.debug('articlesFromAureliaModified ' , articlesFromAurelia); 
     return articlesFromAurelia; 
    }); 

    sails.log.debug('articlesFromAureliaNotModified ' , articlesFromAurelia); 
    return articlesFromAurelia; 
} 

Das Problem ist natürlich die Ausführungsreihenfolge des Codes. Meine Funktion wurde bereits zurückgegeben, wenn die Ergebnisse von Async-Vorgängen verfügbar sind .... also, wie funktioniert es? Vielen Dank!!

+0

entfernen letzten beiden Zeilen. und Callback an 'convertProductfields' übergeben –

Antwort

1

Verwendung von Knoten 6.0, kann in gebauten Versprechen verwendet werden.

convertProductfields: function (articlesFromAurelia){ 

    var allPromises = articlesFromAurelia 
         .map(post => new Promise((resolve, reject) => { 
           Categories.find({name: post.Categoria}) 
           .then((category) => resolve(category)) 
           .fail((error) => reject(error)) 
           })); 
    return Promise.all(allPromises); 
} 

Und die obige Funktion zu nutzen,

convertProductfields(articlesFromAurelia) 
    .then(() =>{ 
     //handle success 
    }).catch(() => { 
     //handle error 
    }) 
0

Ich hoffe, es hilft Ihnen.

convertProductfields: function (articlesFromAurelia, callback){ 

    async.each(articlesFromAurelia, function (post, cb) { 
    Categories.find({name: post.Categoria}) 
     .then(function(category){ 
     post.cat_id = category[0].cat_id; 
     cb(); 
     }) 
     .fail(function(error){ 
     cb(error); 
     }) 
    }, function(error){ 
    if(error) 
     return callback(null); //incase of error, return null 

    sails.log.debug('articlesFromAureliaModified ' , articlesFromAurelia); 
    return callback(articlesFromAurelia); //return updated articles 
    }); 
} 
Verwandte Themen