首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在同一个EJS文件中调用另一个函数。

在同一个EJS文件中调用另一个函数。
EN

Stack Overflow用户
提问于 2021-11-24 11:43:36
回答 2查看 173关注 0票数 1

我试图调用另一个函数,它位于同一个ejs文件中。

代码语言:javascript
运行
复制
async function (request, state, logger) {
    var fs = require('fs');
    var path = require('path');
    var util = require('util');
    var response;
    var RspFilename = "my-success.xml";
    var responsepath = path.join('ConfigFiles', 'Responses', 'ABS', RspFilename);
    response = fs.readFileSync((responsepath), 'utf8');

    await this.sleep(1000);
    return {
        headers: {
            "HTTP-Response-Code": 200,
            "HTTP-Response-Code-Text": "OK",
            "Content-Type": "text/xml"
        },
        "statusCode": "200",
        body: response
    };
}


function sleep(ms) {
    return new Promise((resolve) => {
        setTimeout(resolve, ms);
    });
} 

我正在尝试这个山庄。但是,当调用端点时,会出现以下错误

代码语言:javascript
运行
复制
{
    "errors": [
        {
            "code": "invalid injection",
            "message": "invalid response injection",
            "source": "(async function (request, state, logger) {\n    var fs = require('fs');\n    var path = require('path');\n    var util = require('util');\n    var response;\n    var RspFilename = \"my-success.xml\";\n    var responsepath = path.join('ConfigFiles', 'Responses', 'ABS', RspFilename);\n    response = fs.readFileSync((responsepath), 'utf8');\n\n    logger.info(\"---------Response Sent Successfully--------\" + RspFilename + response);\n    await this.sleep(1000);\n    return {\n        headers: {\n            \"HTTP-Response-Code\": 200,\n            \"HTTP-Response-Code-Text\": \"OK\",\n            \"Content-Type\": \"text/xml\"\n        },\n        \"statusCode\": \"200\",\n        body: response\n    };\n}\n\n\nfunction sleep(ms) {\n    return new Promise((resolve) => {\n        setTimeout(resolve, ms);\n    });\n})(scope, injectState, logger, deferred.resolve, imposterState);",
            "data": "Unexpected token function",
            "name": "Error",
            "stack": "Error\n    at Object.from (C:\\Repo\\mountebank\\src\\util\\inherit.js:15:17)\n    at createError (C:\\Repo\\mountebank\\src\\util\\errors.js:10:26)\n    at Object.InjectionError (C:\\Repo\\mountebank\\src\\util\\errors.js:25:16)\n    at inject (C:\\Repo\\mountebank\\src\\models\\responseResolver.js:43:44)\n    at processResponse (C:\\Repo\\mountebank\\src\\models\\responseResolver.js:243:20)\n    at Object.resolve (C:\\Repo\\mountebank\\src\\models\\responseResolver.js:277:16)\n    at Object.resolve (C:\\Repo\\mountebank\\src\\models\\stubRepository.js:136:25)\n    at F.respond (C:\\Repo\\mountebank\\src\\models\\http\\baseHttpServer.js:94:34)\n    at C:\\Repo\\mountebank\\src\\models\\abstractServer.js:105:39\n    at _fulfilled (C:\\Repo\\mountebank\\node_modules\\q\\q.js:854:54)"
        }
    ]
}

实际上,我的要求是为响应添加一些延迟。

顺便说一句,我试过坐岸等待,但没有看到任何延迟。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-24 16:14:43

按照http://www.mbtest.org/docs/api/injection上的代码示例,看来坐骑银行并不期望任何东西会跟随单个匿名函数,因此,当它开始读取function sleep时,就会出现“意外的令牌函数”。

尝试将sleep移到另一个函数中。不远了,因为您已经对模块导入做了同样的工作:

代码语言:javascript
运行
复制
async function (request, state, logger) {
    // ...
    function sleep(ms) {
        return new Promise((resolve) => {
            setTimeout(resolve, ms);
        });
    } 

    await sleep(1000);
    // ...
}

或者简单的

代码语言:javascript
运行
复制
async function (request, state, logger) {
    // ...
    await new Promise(resolve => setTimeout(resolve, 1000));
    // ...
}

或者,简化整个函数

代码语言:javascript
运行
复制
function (request, state, logger) {
    // ...
    return new Promise(resolve => setTimeout(() => {
        resolve({
            headers: // ...

        })
    }, 1000);
}
票数 1
EN

Stack Overflow用户

发布于 2021-11-24 12:27:23

您正在声明一个函数,但忘了在第1行中给它命名。

如果您打算定义一个匿名函数,而不是创建一个async function语句,则需要将它括在括号中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70095494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档