2016-05-18 8 views
0

Ich habe Probleme mit der Erfassung jeder ID von queryArray und Speichern mit den Rückgabeversprechen Ergebnisse.zurückgegebene Ergebnisse von provect.all() erfasst keine Bereichsvariable

getSavedQueries: function(req, res) { 
    SPromise.then(function(client) { 
     const SavedQuery = client.Reports; 
     var queryArray = req.query.queryArray; // ['123', '234', '456'] 
     var payloadObj = {}; 
     var actions = lo.map(queryArray, function(id) { 
     var queryID = Number(id); 
     *payloadObj['ID'] = queryID;* <--- not sure where to put this 
     return SavedQuery.findOne(queryID).then(function(result){ 
      payloadObj['query'] = result; 
      return payloadObj 
     }); 
     }); 
     return Promise.all(actions); 
    }).then(function(result){ 
     return res.json(result) 
    }); 
    } 

mein res.json (Ergebnis) kehrt mit dem letzten Punkt auf dem Array für alle drei Objekte:

[ {ID: 456, query: ...}, 
    {ID: 456, query: ...}, 
    {ID: 456, query: ...}] 

Statt:

[ {ID: 123, query: ...}, 
    {ID: 234, query: ...}, 
    {ID: 456, query: ...}] 
+1

Sie verwenden immer das gleiche 'NutzlastObj'. –

Antwort

3

Das Problem ist, dass payloadObj ist außerhalb des Karten-Callbacks definiert. Aus diesem Grund wird dasselbe Objekt während des Karten-Callbacks mutiert und von der Methode then zurückgegeben, die im Karten-Callback erstellt wurde, sodass das an Promise.all übergebene Array 3 Versprechen enthält, die alle in das gleiche Objekt aufgelöst werden , deren ID -Eigenschaft die letzte ID im Array ist (da dieser Map-Callback zuletzt aufgerufen wird) und deren query -Eigenschaft das Ergebnis der letzten erfolgreichen Anfrage ist (wahrscheinlich, aber nicht unbedingt, die letzte Anfrage).