gpt4 book ai didi

javascript - 当 "looping"时,无法在 native Promise 之间传递数据

转载 作者:行者123 更新时间:2023-12-03 06:38:02 25 4
gpt4 key购买 nike

我在尝试使用 native JS“循环”到多个“嵌套” promise 时遇到问题。

我有一个包含许多子级别的 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)中,我无法从前一个 Promise 中检索 mysql 新 id,因为 result 包含 Promise 并且不应该返回适​​当的数据。

感谢您的帮助。

最佳答案

您的第一个 result 参数将是 conn.query() 解析的任何内容的数组(这就是 Promise.all() 解析的内容和)。因此,result.insertId 将是 undefined,因为 result 是一个数组,而不是具有命名属性的对象。

.insertId 将是 result 的每个单独数组元素的属性。如果您想从上一个查询返回的最后结果中读取它,那么您可以使用如下内容:

result[result.length - 1].insertId

这与为单个 INSERT 操作设置 .insertId 的方式一致,如下所示 Return last inserted id with mySQL .

关于javascript - 当 "looping"时,无法在 native Promise 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38099341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com