Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析函数内的承诺会导致X(…)不是函数错误_Javascript_Promise_Settimeout - Fatal编程技术网

Javascript 解析函数内的承诺会导致X(…)不是函数错误

Javascript 解析函数内的承诺会导致X(…)不是函数错误,javascript,promise,settimeout,Javascript,Promise,Settimeout,我正在对我的API进行负载测试,但在某个时候我调用了另一个API。 因为我不想强调第二个问题,所以每当我进行负载测试时,我都想设置一个超时并返回一个OK响应,如下所示: function sendMessage(requestLib, blockApi, logger) { if(!blockApi){ return (*my params*) => requestLib(`someURL`, { headers: { Authorizati

我正在对我的API进行负载测试,但在某个时候我调用了另一个API。 因为我不想强调第二个问题,所以每当我进行负载测试时,我都想设置一个超时并返回一个OK响应,如下所示:

function sendMessage(requestLib, blockApi, logger) {
    if(!blockApi){
        return (*my params*) => requestLib(`someURL`, {
            headers: { Authorization: `Bearer ${token}` },
            method: 'post',
            data
        });
    }else{
        logger.info("About to use the promise");
        const response = returnOk.then(function() {
            return new Response(200, {}, null, 'dummy.com');
        });
        return response;
    }
}
module.exports = ({ requestLib, Logger }) => async function(req, res) {
     // Some unrelated code to decide if I'll call sendMessage
     const response = await sendMessage(requestLib, blockApi, logger)(params);
     // I log the response
     res.end();
}
returnOk是我前面用这种方式定义的承诺:

const returnOk = new Promise((resolve, reject) => {
    setTimeout( function() {
      resolve("Success!") 
    }, 2000) 
  });
函数sendMessage在另一个函数中调用,如下所示:

function sendMessage(requestLib, blockApi, logger) {
    if(!blockApi){
        return (*my params*) => requestLib(`someURL`, {
            headers: { Authorization: `Bearer ${token}` },
            method: 'post',
            data
        });
    }else{
        logger.info("About to use the promise");
        const response = returnOk.then(function() {
            return new Response(200, {}, null, 'dummy.com');
        });
        return response;
    }
}
module.exports = ({ requestLib, Logger }) => async function(req, res) {
     // Some unrelated code to decide if I'll call sendMessage
     const response = await sendMessage(requestLib, blockApi, logger)(params);
     // I log the response
     res.end();
}
正常的流程就像一个符咒,但是当我进行负载测试时,我会返回OK。然后。。。 它抛出

发送消息。。。这不是一个函数

如果我删除超时并返回

return new Response(200, {}, null, 'dummy.com');
一切正常。

出于某种原因,sendMessage…函数返回另一个函数:

return (*my params*) => …
模拟sendMessage时,您也需要这样做:


顺便说一句,您真的不应该将此布尔blockApi参数用于sendMessage。使用相同的签名编写两个不同的函数,并在调用该函数的代码中使用依赖项注入。

可能是logger.info不是定义了sendMessage的函数?需要导入logger吗?logger.info工作正常,我可以在控制台中看到如何使用promise。第一部分是sendMessage的定义。它在另一个函数中调用,如下所示:const response=await sendmagesrequestlib、blockApi、loggerparams;我们需要更多的细节来了解这里发生了什么,特别是关于在哪里打电话。我怀疑调用站点的本地作用域中可能存在另一个名为sendMessage的非函数变量。将围绕调用的代码添加到主问题中。