javascript - 试图让函数返回带有推送数据的 arr,但由于某种原因它没有在那里返回它
问题描述
在这里,我需要主索引文件中的 sql 为数据库播种并检查 sql 查询是否返回
// require sql connection from main index
const connection = require('./index');
async function tow() {
let arr = [];
let one = await connection.query("Select name FROM department", (err, res) => {
if (err) throw err;
// console.log(res);
console.log('1'arr);
for (let i = 0; i < res.length; i++) {
// pushing to the array here
arr.push(res[i].name);
}
console.log('2',arr);
});
console.log('3',arr);
return one;
}
// I want this function to return array with the pushed elements
tow();
解决方案
您需要返回 arr。此外,您将 promise 样式与异步的回调样式混合在一起,您可以做任何一种,但不能混合使用。尝试这样的事情。
如果 connection.query 返回一个承诺:
async function tow() {
let arr = [];
let one = await connection.query("Select name FROM department").then(res => {
// console.log(res);
console.log('1', arr);
for (let i = 0; i < res.length; i++) {
// pushing to the array here
arr.push(res[i].name);
}
console.log('2',arr);
return arr; // need to return arr
},
err => console.error(err));
console.log('3',arr);
return one;
}
tow().then(res => console.log('result', res));
在您的情况下,connection.query
需要回调函数,您可以将回调转换为这样的承诺。
function tow() {
return new Promise((resolve, reject) => {
let arr = [];
connection.query("Select name FROM department", (err, res) => {
if (err) reject();
// console.log(res);
console.log('1', arr);
for (let i = 0; i < res.length; i++) {
// pushing to the array here
arr.push(res[i].name);
}
console.log('2',arr);
resolve(arr);
});
})
}
// I want this function to return array with the pushed elements
tow().then(res => console.log('result', res));
这是一个codeSandbox
推荐阅读
- amazon-web-services - 如何扇出 SQS
- android - 从 ntp 服务器获取时间而不允许用户操纵时间
- docker - Docker 构建抛出“react-scripts: not found”错误
- excel-formula - Vlookup 在其他选项卡上,使用公式 (left()) 作为选项卡名称
- batch-file - 如何获取 txt 文件的第一行并将其设置为批处理中的 %variable%?
- maven-3 - 如何获取我的 pom.xml 中包含的依赖项的最新发布版本
- python - 如何从 json 格式中获取数据帧
- reactjs - 为什么 React Router 显示 404 的路由
- python - 如何用Python提取和识别车牌号?
- php - 在 Web 主机中部署 Laravel 项目