如何在nodejs中使用回调或promise

How to use callback or promises in node js?

本文关键字:回调 promise nodejs      更新时间:2024-04-11

你好,我是nodejs中promise和callback的新手我正在使用另一个函数来获取用户列表,该函数使用回调,但失败了。我找到了一个可以使用承诺的地方。但从不使用承诺。有人能帮我写代码吗?

send_noti('12', function(res){
    console.log(res);
});
function send_noti(value, callback){
    connection.query(" SELECT * from users ", function( err, res ){
        callback( res );
    });
}

您正在寻找这样的东西:

function sendNotiAsync(value) {
  return new Promise((resolve, reject) => // Promise constructor
    connection.query("SELECT * from users", (err, data) => // Perform the action
      err ? reject(err) : resolve(data))); // If error exists, reject, else resolve
}

并像这样使用:

sendNotiAsync(someValue)
  .then(data => {
    // Work with data here, for example
    console.log(data);
  })
  .catch(err => {
    // Handle errors here
    console.error(err);
  });

异步函数的节点内回调应始终具有签名function(err, result /*,...*/)

您的示例应该是:

 send_noti('12', function(err, res) {
   if( !err ) {
     console.log(res);
   }
 });
 function send_noti(value, callback) {
   connection.query(" SELECT * from users ", callback );
 }

除此之外,您的示例没有使用Promises。有了Promises,它看起来是这样的:

send_noti('12')
  .then(function(res) {
     console.dir(res)
  })
  .catch(function(err) {
     console.dir(err)
  })
function send_noti(value, callback) {
  return new Promise(function(resolve, reject) {
    try {
      connection.query(" SELECT * from users ", function(err, res) {
        if (err) {
          reject(err);
        } else {
          resolve(res);
        }
      });
    } catch (err) {
      reject(err);
    }
  })
}