【问题标题】:Asynchronous Queries in node.js, waiting and promisesnode.js 中的异步查询,等待和承诺
【发布时间】:2020-05-17 06:43:38
【问题描述】:

我很难在 node.js 中链接函数,我无法让接收者等待。 承诺不应该是异步的,因此不应该适合这样的任务吗?

const promise = new Promise((resolve, reject) => {
  var input = 'SELECT * FROM ideas;';
  connection.query(input, (err, results) => {
    if(err) {
      console.log(err);
      reject();
    } else {
      console.log('success');
      results = JSON.stringify(results);
      console.log(results);
      resolve();
      return results;
    }
  })
});

promise.then(function(results) {
  results = JSON.parse(results);
  console.log(results);
});

我希望有人知道我在这里缺少什么并可以提供帮助!

【问题讨论】:

  • 仅供参考,如果您安装并使用require('mysql2/promise');,那么您可以在数据库中使用内置的承诺支持,而不是手动承诺每个操作。

标签: javascript mysql node.js express asynchronous


【解决方案1】:

?你只需要将results添加到resolve和err到reject。

?‍?举个例子你可以使用下面的代码:?

const promise = new Promise((resolve, reject) => {
  var input = 'SELECT * FROM ideas;';
  connection.query(input, (err, results) => {
    if(err) {
      reject(err);
    } else {
      console.log('success');
      results = JSON.stringify(results);
      console.log(results);
      resolve(results);
    }
  })
});

promise.then(function(results) {
  results = JSON.parse(results);
  console.log(results);
}).catch(error => {
  console.log(error);
})

希望对你有帮助?。

【讨论】:

  • aaaaaaah,抱歉这个愚蠢的问题!非常感谢你:)
  • 大家还在学习。如果该答案对您有帮助,请不要忘记标记为正确答案✔️。提前致谢。
【解决方案2】:

在reject() 或resolve() 语句中发回一些数据,目前您期待一些结果,但注意正在发回。只需像这样转换您的拒绝和解决语句: resolve(results); reject(err);

一个额外的技巧,也用 promise.then 链接一个 catch 块,这样异常也被成功处理。如下 promise.then(function() { //code if promise resolves }).catch(function(){ //code if promise rejects });

【讨论】:

    猜你喜欢
    • 2018-01-05
    • 2019-12-04
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多