Ich habe Probleme beim Versuch, mehrere "verschachtelte" Versprechungen mit nativen JS "zu wiederholen".Daten können nicht zwischen nativen Versprechungen übergeben werden, wenn sie "geloopt" werden
Ich habe einen JSON mit vielen Unterebenen wie gezeigt:
{
"project": {
"name": "TESTNAME",
"label":"string11405",
"description":"das",
},
"form": [{
"label": "string",
"name": "string",
"fields": [{
"label": "string",
"name": "string",
"field_type_id": "string",
"meta": [{
"meta_name": "string",
"meta_value": "string"
}]
}]
}
So habe ich überprüft, dass ich Promise.all
verwenden müssen.
return Promise.all(_.map(req.crfData ,(value,index,arr) => {
var table = 'TABLE1';
return conn.query(`INSERT INTO ${table} SET ?`,[value]);
}))
.then((result) => {
var table = 'TABLE2';
return Promise.all(_.map(req.fieldData ,(value,index,arr) => {
value.crf_id = result.insertId;
return conn.query(`INSERT INTO ${table} SET ?`,[value]);
}));
})
.then((result) => {
var table = 'TABLE3';
return Promise.all(_.map(req.fieldData ,(value,index,arr) => {
return conn.query(`INSERT INTO ${table} SET ?`,[value[0]],(err) => next(err));
}));
})
.catch((err) => next(err));
Das Problem kommt mit der zweiten Abfrage (Tabelle 2), wo ich nicht die mysql neuen id aus dem vorherigen Versprechen abrufen kann, weil result
ein Versprechen enthält und nicht die sachgemäßen Daten zurückgegeben werden sollen.
Danke für die Hilfe.
Ich würde erwarten, dass das 'Ergebnis' Daten aus der ersten Abfrage enthält. Was ist das 'conole.log' dieses Ergebnisses var? – steampowered
'result' enthält ein Array mit den Ergebnissen der einzelnen Versprechen (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all#Using_Promise.all) – mhu