javascript - 等待功能但仍然没有结果

标签 javascript asynchronous async-await

我正在尝试创建两个函数,一个函数需要两周,另一个函数创建一个提示,我想在其中显示几周,这就是我尝试过的:

let weeks = {};

async function getWeeks() {
    await sql.open('./weeks.db');
    sql.get(`SELECT * FROM weeks WHERE id = "1"`).then(row => {
        weeks.firstWeek = row.week;
    }).catch(console.error);
    sql.get(`SELECT * FROM weeks WHERE id = "2"`).then(row => {
        weeks.secondWeek = row.week;
    }).catch(console.error);
    sql.close();
}

await getWeeks().then(async function() {
    makeEdits();
});

async function makeEdits() {
    message.channel.send(new Discord.RichEmbed().setTitle(`Which week do you want?`).setDescription(`🇪 for **${weeks.firstWeek}**.\n🇹 for **${weeks.secondWeek}**.`)).then(async function(message) {
        // Both values are undefined here however I can use them deeper down into the function

我尝试等待一个函数,然后启动另一个函数,但它没有按预期工作,我应该做什么?

最佳答案

你还必须await sql.get调用,您可以重构您的 .then发送至await提高可读性:

 async function getWeeks() {
   const weeks = {}; // local scope helps to prevent racing errors

   await sql.open('./weeks.db');

   try {
     const row = await sql.get(`SELECT * FROM weeks WHERE id = "1"`);
     weeks.firstWeek = row.week;
   } catch(error) { console.error(error); }

   try {
     const row = await sql.get(`SELECT * FROM weeks WHERE id = "2"`);  
     weeks.secondWeek = row.week;
   } catch(error) { console.error(error); }

   sql.close();

   return weeks;
}

function makeEdits(weeks) { /*...*/ }

makeEdits(await getWeeks());

关于javascript - 等待功能但仍然没有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52794087/

相关文章:

javascript - 通过 AJAX 向 Django View 提交 JS 数组会返回 TypeError

javascript if else 语句问题

c# - 将异步回调与 Task.ContinueWith 结合使用

c# - 并行运行时 IronPDF 死锁

javascript - 在联系表单上提交时不要输入 "Leave this page"

javascript - jQuery - 在外部单击时关闭对话框

javascript - 如何在没有内联脚本的情况下异步加载 CSS(符合 CSP)

python - 异步处理数组中的多个文件 - Python

c# - 单元测试无限轮询方法

c# - 如何让 WebClient 等到上一次下载完成?