目前,我正在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
有什么主意我在做错什么,或者我怎么能达到预期的效果?
答案 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以更复杂的方式来实现,但我强烈建议您首先了解此示例。