【问题标题】:How return a value from an asynchronous function with SQLite3 and node.js?如何使用 SQLite3 和 node.js 从异步函数返回值?
【发布时间】:2020-09-10 03:51:00
【问题描述】:

我正在尝试使用 SQLite3 为我的不和谐机器人(在 node.js 上)创建一个小型数据库,并且我想创建一个函数,用提供的值更新数据库(这部分有效)或返回一个值数据库。

我的问题在这里,返回的值总是未定义...

我知道 SQLite3 命令是异步的,所以所有的函数都变成了异步的,但是我怎样才能确保返回的值不再是未定义的呢?

这是我的代码:

const sqlite3 = require('sqlite3');
const dbname = 'dbStocks';

module.exports = function gestionBDD(update, nomArticle, quantitéArticle) {
 console.log('1 ' + quantitéArticle);

 let db = new sqlite3.Database(dbname, (err) => {
  if (err) throw err;
  console.log('Démarrage de ' + dbname);
 });

 db.serialize(() => {
  nomArticle = '"' + nomArticle + '"';

  if (update) {
   //Si update est true : maj des quantités via le tableau articles

   db.run(
    `UPDATE stocks
                SET Quantité = (` +
     quantitéArticle +
     `)
                WHERE Article = (` +
     nomArticle +
     `)`
   );
  } else if (!update) {
   db.each(
    `SELECT Quantité FROM stocks WHERE Article  = (` + nomArticle + `)`,
    (err, data) => {
     console.log('2 ' + data.Quantité);
     return data.Quantité;
    }
   );
  }

  console.log('4 ' + quantitéArticle);
  db.close((err) => {
   if (err) throw err;
   console.log('Arrêt de ' + dbname);
  });
 });
};

我得到了这个结果:

1 undefined
4 undefined
3 undefined
Démarrage de dbStocks
2 500
Arrêt de dbStocks

3 undefined 是我的index.js 中的console.log(),其中我的函数gestionBDD 被调用)

【问题讨论】:

    标签: javascript node.js discord discord.js node-sqlite3


    【解决方案1】:

    您可以返回一个可以在以后为函数返回解决的承诺,如下所示:

    return new Promise((resolve, reject) => {
     db.run(`query statement here`, (err, row) => {
      if (err) reject(err);
      resolve(row);
     });
    });
    

    将 this 写在函数的顶部以使其成为异步函数。调用函数时使用etherawaitthen获取返回结果数据。

    【讨论】:

    • 我不明白,resolve() 函数到底是什么?它是我必须用来获取返回结果数据的函数吗?我对这个异步功能和承诺系统有困难......
    • resolve() 函数用于异步返回数据,是的,您必须使用它来获取数据。拒绝函数用于返回错误或失败的消息和数据。
    猜你喜欢
    • 2020-09-12
    • 1970-01-01
    • 2018-01-03
    • 2020-07-29
    • 2021-03-04
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多