gpt4 book ai didi

javascript - node.js mysql insert id - 如何在插入查询之外公开插入 id?

转载 作者:行者123 更新时间:2023-11-29 03:23:14 27 4
gpt4 key购买 nike

假设我有一个 json 格式(或任何格式)的值列表,我需要将其插入到 mysql 表中。插入后,我需要在 mysql.query 调用之外公开 result.insertId。有没有办法做到这一点? (请不要问我为什么需要这个:我知道如何解决这个问题。我只需要知道这种情况是否可能)。理想情况下,每个数组项的描述和插入 Id 应该打印到屏幕上。相反,我得到一个空数组。是的,我知道将 console.log 放在回调的 inside 中可以实现这一点。那不是我需要的答案。是否可以在回调之外公开插入 Id?

var todos = require('./todos.json');
var mysql = require('mysql');

var mysql_pool = mysql.createPool({
host : 'localhost',
user : 'myuser',
password : 'mypwd',
database : 'mydb'});

var todoArray = [];

todos.forEach(function(todo) {
mysql_pool.query("INSERT INTO todos(description) VALUES(?)", todo.description, function(err, result){
if (err) {
console.log(" Unable to insert: " + err);
throw err;
}
todoArray.push({description: todo.description, desc_id: result.insertId});
});
});

console.log(todoArray);

最佳答案

我同意 Brian 在 console.log 命令后完成的查询回调函数的异步性质,因此没有结果。关于查询循环,下面的方法通过使其顺序化来解决这个问题。运行前一个查询回调时加载下一个数据。

问题是您无法知道何时使用当前方法处理整个数组。如果您知道最后一个循环,则可以将数组作为查询回调的最后一步进行处理。在此之前,您只需加载数组。

使用迭代器下一个命令将为您提供下一个值和一个指示符(如果它是最后一个循环)。

希望是这样的:

//use require to get node to parse in the json file as an object
//set todo as iterator type
var todos = require("./path/todos.json")[Symbol.iterator](),
todoArray = [],
todo = todos.next()

//todos.next() iterator cammand returns {done: true/false, value: { }}
//we want to know the end so we can process todoAray

do {
mysql_pool.query("INSERT INTO todos(description) VALUES(?)",
todo.value.description,
function(err, result){
if (err) { console.log(" Unable to insert: " + err); throw err; }
todoArray.push({description: todo.value.description, desc_id: result.insertId})
todo = todos.next()
If(todo.done === true){
console.log(todoArray)
}
});
}while (!todo.done)

关于javascript - node.js mysql insert id - 如何在插入查询之外公开插入 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40551786/

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