2017-05-09 3 views
0

Ich versuche, Abfrage-Ergebnis von in for-Schleife zu JSONKnoten js: mysql Abfrage-Ergebnis hinzufügen in forloop JSon

function (req,res){ 
var result = [{id:1 
},{id:2},{id:3}]; 

for(var i=0;i<result.length;i++){ 
         //query run 
         collection.getImages(result[i].id,function (status,error,image) { 
          //add query result to json 
          result[i]['images']=image; 

         }); 
        } 

res.json(result); 

} 

Aber die endgültigen result nicht enthält den neu hinzugefügte Schlüsselwert (dh images hinzufügen) es, weil collection.getImages() ist asynchron so wie kann ich
dies lösen?

Antwort

1

Sie könnten Promises verwenden, um Ihre asynchronen Anrufe zu verarbeiten. Dann können Sie Promise.all() verwenden, um alle Aktionen abzuwarten, bevor Sie das Ergebnis an den Client senden.

var result = [ 
    {id: 1}, {id: 2}, {id: 3} 
]; 

var promises = []; 
for (var i = 0; i < result.length; i++) { 
    //query run 
    promises.push(new Promise(function (resolve, reject) { 
     collection.getImages(result[i].id, function (status, error, image) { 
      if (error) { 
       reject(error); 
      } else { 
       resolve(image); 
      } 
     }); 
    })); 
} 

Promise.all(promises).then(function (images) { 
    for (var i = 0; i < images.length; i++) { 
     result[i]['image'] = images[i]; 
    } 
    res.json(result) 
}).catch(function (error) { 
    // handle error 
}); 
+1

mit Code erkläre ich nie benutzt Versprechen – Jabaa

+0

Added Code-Schnipsel –

+0

ich diesen Fehler bekam 'Typeerror: kann nicht eingestellt Eigenschaft‚Bilder‘von undefined' – Jabaa

Verwandte Themen