Javascript 解析函数内的承诺会导致X(…)不是函数错误
我正在对我的API进行负载测试,但在某个时候我调用了另一个API。 因为我不想强调第二个问题,所以每当我进行负载测试时,我都想设置一个超时并返回一个OK响应,如下所示: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
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的非函数变量。将围绕调用的代码添加到主问题中。