Node.js 使用节点rfc时出错:客户端在关闭连接的情况下调用rfc调用

Node.js 使用节点rfc时出错:客户端在关闭连接的情况下调用rfc调用,node.js,sap,saprfc,Node.js,Sap,Saprfc,我正在尝试使用Node.js应用程序从SAP系统获取数据 请建议在我的代码中放置async/await,或者使用不同的方法 我尝试了许多不同的方法,但调用仍然不会等待连接完成:( 当客户端尚未连接时,您调用invoke太快。您使用的函数client.connect接受回调作为参数,即在连接建立或失败时调用的函数。这意味着您必须在该函数内调用RFC,如下所示: router.get('/', function(req, res, next) { client.connect(err =&g

我正在尝试使用Node.js应用程序从SAP系统获取数据

请建议在我的代码中放置
async/await
,或者使用不同的方法

我尝试了许多不同的方法,但调用仍然不会等待连接完成:(


当客户端尚未连接时,您调用
invoke
太快。您使用的函数
client.connect
接受回调作为参数,即在连接建立或失败时调用的函数。这意味着您必须在该函数内调用RFC,如下所示:

router.get('/', function(req, res, next) {
    client.connect(err => {
        if (err) {
            return res.status(500).send(err);
        }
        client.invoke(
            'RFC_READ_TABLE',
            { QUERY_TABLE: 'USR01', DELIMITER: '|' },
            (err, result) => {
                if (err) {
                    return res.status(500).send(err);
                }
                res.send(result);
            }
        )
    });
});
或者,如果您更喜欢异步/等待:

router.get('/', async function(req, res, next) {
    try {
        await client.open();
        let result = await client.call(
            'RFC_READ_TABLE',
            { QUERY_TABLE: 'USR01', DELIMITER: '|' }
        );
        res.send(result);
    } catch (err) {
        return res.status(500).send(err);
    }
});
router.get('/', function(req, res, next) {
    client.connect(err => {
        if (err) {
            return res.status(500).send(err);
        }
        client.invoke(
            'RFC_READ_TABLE',
            { QUERY_TABLE: 'USR01', DELIMITER: '|' },
            (err, result) => {
                if (err) {
                    return res.status(500).send(err);
                }
                res.send(result);
            }
        )
    });
});
router.get('/', async function(req, res, next) {
    try {
        await client.open();
        let result = await client.call(
            'RFC_READ_TABLE',
            { QUERY_TABLE: 'USR01', DELIMITER: '|' }
        );
        res.send(result);
    } catch (err) {
        return res.status(500).send(err);
    }
});