如何在异步调用中执行数据库查询?

2020-09-06 16:21发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


当前,我已经编写了一个代码,该代码调用https链接并返回promise对象。 我正在使用await在异步函数中检索promise对象。 我需要写一个条件,建立一个数据库连接并将记录插入异步表中。

所有这些都应该在异步函数中发生,但是在执行相同的操作时,我会收到"错误是错误:没有光纤就无法等待"。

我需要了解为什么会出现此错误。 我非常确定这是由于异步操作而发生的,但是我不确定如何解决此问题。 下面是代码

 function apiTrigger(url,protocol){
 var result = {};
 var http = $ .require(protocol);
 var输出=新的Promise(函数(解决,拒绝){
 http.get(URL,function(res){
 --------------
 --------------
 --------------
 解决(结果);
 }
 });
 })。on('错误',拒绝);
 });
 返回输出;
 };
 异步函数apiCall(cb){
 尝试{
 var result = await apiTrigger(
 '链接',
 'https');
 console.log("输出为" + JSON.stringify(result));
 var Retrieve = result.retrievedOutput;
 console.log(" Printed" +检索);
 var message = JSON.parse(result.retrievedOutput);
 console.log(" message" + message.MESSAGE);
 if(message.MESSAGE == 1){
 var connection = $ .hdb.getConnection();
 var query ='插入"便携式"值(?,?,?,?,?)';
 console.log("查询为" +查询);
 connection.executeUpdate(query,'2019-03-21',5,'MDU','INR',899);
 connection.commit();
 }
 } catch(err){
 console.log("错误为" + err);
 }
 };
 $ .response.setBody(apiCall()); 

当前,当我执行此代码时,我得到"错误是错误:没有光纤就无法等待"。 预期结果是执行数据库查询。 请帮助

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


当前,我已经编写了一个代码,该代码调用https链接并返回promise对象。 我正在使用await在异步函数中检索promise对象。 我需要写一个条件,建立一个数据库连接并将记录插入异步表中。

所有这些都应该在异步函数中发生,但是在执行相同的操作时,我会收到"错误是错误:没有光纤就无法等待"。

我需要了解为什么会出现此错误。 我非常确定这是由于异步操作而发生的,但是我不确定如何解决此问题。 下面是代码

 function apiTrigger(url,protocol){
 var result = {};
 var http = $ .require(protocol);
 var输出=新的Promise(函数(解决,拒绝){
 http.get(URL,function(res){
 --------------
 --------------
 --------------
 解决(结果);
 }
 });
 })。on('错误',拒绝);
 });
 返回输出;
 };
 异步函数apiCall(cb){
 尝试{
 var result = await apiTrigger(
 '链接',
 'https');
 console.log("输出为" + JSON.stringify(result));
 var Retrieve = result.retrievedOutput;
 console.log(" Printed" +检索);
 var message = JSON.parse(result.retrievedOutput);
 console.log(" message" + message.MESSAGE);
 if(message.MESSAGE == 1){
 var connection = $ .hdb.getConnection();
 var query ='插入"便携式"值(?,?,?,?,?)';
 console.log("查询为" +查询);
 connection.executeUpdate(query,'2019-03-21',5,'MDU','INR',899);
 connection.commit();
 }
 } catch(err){
 console.log("错误为" + err);
 }
 };
 $ .response.setBody(apiCall()); 

当前,当我执行此代码时,我得到"错误是错误:没有光纤就无法等待"。 预期结果是执行数据库查询。 请帮助

付费偷看设置
发送
2条回答
歪着头看世界
1楼 · 2020-09-06 16:50.采纳回答

您正在尝试将XSJS的同步编程模型与Node.js的异步非/阻塞模型混合使用。 对于光纤,这是不可能的(可以在此处进行检查)。

在使用XSA并尝试实现新功能时(就像我假设的那样),问题是为什么您仍在使用XSJS而不是纯Node.js。 这样可以避免您现在遇到的所有问题或使用光纤的麻烦。

callcenter油条
2楼-- · 2020-09-06 16:54

基本上,您需要了解的一切都可以在XS Advanced的官方《 SAP HANA开发人员指南》中找到。 我建议您看一下教程设置您的JavaScript XS Advanced中的应用程序,其中描述了设置应用程序的基本步骤(以及重要信息,即您需要使用哪些模块,例如@ sap/xsenv,@ sap/hdbext ...)以及如何访问db/HDI容器并通过服务返回一些数据。

一周热门 更多>