gpt4 book ai didi

javascript - 在调用另一个方法后异步方法没有显示任何进展

转载 作者:行者123 更新时间:2023-11-30 19:04:02 25 4
gpt4 key购买 nike

我有 node-js db.js 类,它返回一个数据数组。

//db.js
const mysql = require('mysql');
var subscribed = [];

const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'mydb'
});
connection.connect((err) => {
if (err) throw err;
console.log('DB Connected!');
});


async function getTopics(subName) {

var qry = `SELECT topic_name from table where topic_name='${subName}'`;

await connection.query(qry, (err,rows) => {
if(err) throw err;
rows.forEach( (row) => {
subscribed.push(row.topic_name);
return subscribed;
});
});
}
module.exports.getTopics = getTopics;

在我的另一个类中,我在下面的代码中使用了 mqtt -- 查看里面的注释

//sub.js
var mqtt = require('mqtt')
var Broker_URL = 'mqtt://test.mosquitto.org';
var client = mqtt.connect(Broker_URL)
const db = require('./db');

const subName = 'iPhoneX';
var subscribed = [];

async function getTopics(){
subscribed = await db.getTopics(subName);
}

client.on('connect', function () {
console.log('connect') // no progress after this point. stops here
getTopics(); // calling above function here to get topics
subscribed.forEach(element => {
client.subscribe(element);
console.log(element);
});

})

client.on('message', function (topic, message) {
console.log(topic, '------>', message.toString());
})

最佳答案

你不应该混合 error-first callbacksasync/await .它们是处理异步流的不同技术,它们不能一起工作。

使用其中之一,最好使用后者,因为它的可读性和易用性要高得多。

async function getTopics(subName) {
var qry = `SELECT topic_name from table where topic_name='${subName}'`

// Convert `connection.query` to a `Promise` so we can properly
// await it.
const rows = await new Promise((resolve, reject) => {
connection.query(qry, (err, rows) => {
if (err) return reject(err)

resolve(rows)
})
})

return rows.map(row => row.topic_name)
})

从那时起,如果一个函数被标记为 async,它需要被 awaited 以使其结果在下一行中可用:

client.on('connect', async function () {
const topics = await getTopics()

console.log(topics)
})

如果您计划使用 async/await,您可能需要使用 mysql2相反,它返回 Promises。您只能在返回 Promises 的函数上使用 async/await

关于javascript - 在调用另一个方法后异步方法没有显示任何进展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59188390/

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