Node.js 如何将预定义函数回调转换为承诺
嗨,我有一个与snowflake连接的代码来执行查询。我想从实现了回调函数的完整键中提取数据。有没有办法,如果我可以停止功能,直到它给出完整的信息。比如用wait之类的Node.js 如何将预定义函数回调转换为承诺,node.js,async-await,node-modules,snowflake-cloud-data-platform,Node.js,Async Await,Node Modules,Snowflake Cloud Data Platform,嗨,我有一个与snowflake连接的代码来执行查询。我想从实现了回调函数的完整键中提取数据。有没有办法,如果我可以停止功能,直到它给出完整的信息。比如用wait之类的 var statement = connection.execute({ sqlText: 'select sysdate() from dual' ,complete: function(err, stmt, rows) { if (err) { cont
var statement = connection.execute({
sqlText: 'select sysdate() from dual'
,complete: function(err, stmt, rows) {
if (err) {
context.error('Failed to execute statement due to the following error: ' + err.message);
} else {
context.log('Successfully executed statement: ' + stmt.getSqlText());
}
}
});
编辑1:
如果我使用
console.log(statement.getStatus()) //output is {fetching}
但是我需要的是一个完整的状态。当语句执行完毕并且结果准备好使用时,将调用完整的回调。所以它已经按照你想要的方式工作了。你不需要等待
当语句执行完毕并且结果可以使用时,将调用完整回调。所以它已经按照你想要的方式工作了。你不需要等待
不能将异步函数转换为同步函数。如果希望代码看起来像同步的,那么可以使用
async/await
。包装函数execAsync
的示例,用于使用async/await
:
函数execAsync(连接,sqlText){
返回新承诺((解决、拒绝)=>{
连接。执行({
sqlText:sqlText,
完成:(err、stmt、rows)=>{
如果(错误){
退货拒绝(err);
}
返回解析([stmt,rows]);
}
});
});
}
(异步()=>{
试一试{
const[statement,rows]=wait execAsync(连接,'select sysdate()from dual');
log(statement.getStatus());
}捕获(错误){
控制台错误(error);
}
})();
不能将异步函数转换为同步函数。如果希望代码看起来像同步的,那么可以使用async/await
。包装函数execAsync
的示例,用于使用async/await
:
函数execAsync(连接,sqlText){
返回新承诺((解决、拒绝)=>{
连接。执行({
sqlText:sqlText,
完成:(err、stmt、rows)=>{
如果(错误){
退货拒绝(err);
}
返回解析([stmt,rows]);
}
});
});
}
(异步()=>{
试一试{
const[statement,rows]=wait execAsync(连接,'select sysdate()from dual');
log(statement.getStatus());
}捕获(错误){
控制台错误(error);
}
})();
您想停止什么?getSqlText()
?下一步或在函数执行某项操作后要执行的操作将其放入回调中。。这可能很难理解,但事情就是这样如果你的函数支持承诺,那么很好,你可以使用异步,看起来更干净,只是更新了我的问题,你想停止什么?getSqlText()
?下一步或在函数执行某项操作后要执行的操作将其放入回调中。。这可能很难理解,但事情就是这样如果你的函数支持承诺那么很好你可以使用异步,看起来更干净刚刚更新了我的问题我想等待函数被执行我想等待函数被执行Hi@Rustam,在最后一段代码中我们不能只使用try catch块。是否需要使用(async()=>{try catch block})(;);。如果没有,您能解释一下这个块在做什么吗?我无法理解。await
只能用于async
函数。代码块(async()=>{})(
是一个将代码包装在async
函数中的函数,允许我们使用wait
。当我使用var-somevar=(async()=>{return something})和console.log(somevar)时,try…catch
块允许我们捕获在execAsync
函数中发生的错误。。它给出了输出承诺{}。你不应该在你的代码中使用(async()=>{})(
构造,如果你想返回一些东西,那么代码中的某个地方有一个函数,你必须声明它为async
并在她的wait
中使用,正如我在答案中所示。我看不到您的完整代码,所以我无法明确地帮助您。您好@Rustam,在最后一块代码中,我们不能只使用try-catch块。是否需要使用(async()=>{try catch block})(;);。如果没有,您能解释一下这个块在做什么吗?我无法理解。await
只能用于async
函数。代码块(async()=>{})(
是一个将代码包装在async
函数中的函数,允许我们使用wait
。当我使用var-somevar=(async()=>{return something})和console.log(somevar)时,try…catch
块允许我们捕获在execAsync
函数中发生的错误。。它给出了输出承诺{}。你不应该在你的代码中使用(async()=>{})(
构造,如果你想返回一些东西,那么代码中的某个地方有一个函数,你必须声明它为async
并在她的wait
中使用,正如我在答案中所示。我看不到您的完整代码,因此我无法明确地帮助您。