如何在节点js中使用回调或承诺?

时间:2016-04-11 07:14:51

标签: javascript node.js promise

您好我是节点js中的promises和callback的新手 我正在做一些事情来使用另一个函数使用回调获取用户列表但是失败。 在某个地方,我发现使用承诺。但从未使用过承诺。 任何人都可以帮我代码吗?

send_noti('12', function(res){

    console.log(res);
});

function send_noti(value, callback){

    connection.query(" SELECT * from users ", function( err, res ){

        callback( res );
    });
}

1 个答案:

答案 0 :(得分:0)

在异步函数的节点回调中,应始终具有签名 send_noti('12', function(err, res) { if( !err ) { console.log(res); } }); function send_noti(value, callback) { connection.query(" SELECT * from users ", callback ); }

您的示例应如下所示:

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);
    }
  })
}

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

    while (!taskContext.isPreviousWorkDone()) {
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            LOGGER.error("Wait failed", e);
        }
    }
    doSomething();