节点js mysqlquery尝试添加.then

时间:2019-02-27 20:12:04

标签: node.js

目前,我正在Node js中开发一个项目。具体来说,我正在为adobe CEP使用soem样板,它允许您在其程序的面板中运行一些js。在代码中,下面的代码很好用。

mysqlConn.query(query, function(err, result) {
do something with error and result})

执行此操作时,会根据是否有数据或存在问题等给我错误或结果。我需要做的是在执行此命令后运行另一个函数并给我结果。我对诺言的了解是有限的(即使您对它的理解也很广泛,也做了很多教程)。据我所知,我假设mysqlConn.query返回一个Promise。所以我以为我可以做到这一点:

mysqlConn.query(query, function(err, result) {
    do something with error and result})
.then(console.log('anything here?'));

这会记录到控制台“这里有东西吗?”但这也使我在控制台中出现此错误。

Uncaught TypeError: mysqlConn.query(...).then is not a function

有什么主意我在做错什么,或者我怎么能达到预期的效果?

1 个答案:

答案 0 :(得分:1)

这表明mysqlConn.query方法未返回Promise

相反,您将需要“承诺化”该方法,以便可以与.then()和朋友一起更改该方法:

const myFunc = new Promise((resolve, reject) => {
  return mysqlConn.query(query, function(err, result) {
    if (err) reject(err);
    return resolve(result);
  });
});

现在,我们有了myFunc,这是一个基于Promise的接口,其中包含了基于回调的query函数。我们可以这样使用它:

return myFunc()
  .then((result) => { ... }) // result will be the result of the query
  .catch((err) => { .. } ) // err from the query as well

这也可以通过other tools以更复杂的方式来实现,但我强烈建议您首先了解此示例。