У меня возникают проблемы с попыткой «зациклиться» на несколько «вложенных» обещаний с родным JS.Не удается передать данные между нативными обещаниями, когда их «петляют»
У меня есть JSON со многими подуровнями, как показано:
{
"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"
}]
}]
}
Так что я проверил, что мне нужно использовать Promise.all
.
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));
Проблема возникает со вторым запросом (TABLE2), где я не могу извлечь MySQL нового идентификатора из предыдущего обещания, потому что result
содержит обещание, а не данные, соответствующий ему должны быть возвращен.
Спасибо за помощь.
Я ожидаю, что 'result' будет содержать данные из первого запроса. Что такое 'conole.log' этого результата var? – steampowered
'result' содержит массив с результатами отдельных обещаний (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all#Using_Promise.all) – mhu