Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 节点js在20秒后发送多个请求_Javascript_Node.js - Fatal编程技术网

Javascript 节点js在20秒后发送多个请求

Javascript 节点js在20秒后发送多个请求,javascript,node.js,Javascript,Node.js,如果响应延迟20秒,我的node js应用程序将发出多个http请求。下面是相同的示例代码 首先,我从浏览器调用getAPI函数。getApi函数调用getAccessTokenAPI,在收到accesstoken后,我调用testApi。现在,如果testApi的响应延迟20秒,则会再次调用GetAccessTokenAPI。我不想用承诺。有人能指出我在这里遗漏了什么或做错了什么吗 shttp = require('http-https'); exports.getAPI = funct

如果响应延迟20秒,我的node js应用程序将发出多个http请求。下面是相同的示例代码

首先,我从浏览器调用getAPI函数。getApi函数调用getAccessTokenAPI,在收到accesstoken后,我调用testApi。现在,如果testApi的响应延迟20秒,则会再次调用GetAccessTokenAPI。我不想用承诺。有人能指出我在这里遗漏了什么或做错了什么吗

shttp = require('http-https');  

exports.getAPI = function(typeObj, request, response, callback) {
var userConf; //contains info such as port, host, url etc

_this.getAccessToken(function(tokenResponse) {
    var tokenInfo = JSON.parse(tokenResponse);
    var accessToken = JSON.parse(tokenInfo.response);
    accessToken = accessToken.access_token;
   if(accessToken) {
    _this.testApi(userConf,accessToken,function(sjmResponse) {
        callback(sjmResponse);
    }
   } else {
     callback(JSON.stringify({"payLoad":null,"reasonCode":"fail","status":null}));
   }
});
};


exports.getAccessToken = function(cb) {
    var tokenConf;  //contains info such as port, host, url etc
    var httpReq = shttp.request(tokenConf, function(res) {
        res.setEncoding('utf8');
        if (res.statusCode == 200) {
            var body = "";
            res.on('data', function (result) {
                body += result;
            });

            res.on('end', function (){
                cb(JSON.stringify({error: '', response: (body)}));
            });
        } else {
            cb(JSON.stringify({error: 'Failed to get user access token '+res.statusCode, response:''}));
        }
    });

    httpReq.on('error', function(e) {
        cb(JSON.stringify({error: 'Failed to get user access token'+e, response:''}));
    });

    httpReq.end();
};


exports.testApi = function(userConf,accessToken,sjmCallback) {
    var userConf; //contains info such as port, host, url etc
    var httpSubmitReq = shttp.request(userConf, function(res) {
        res.setEncoding('utf8');
        if (res.statusCode == 200) {
            var body = "";
            res.on('data', function (result) {
                body += result;
            });
            res.on('end', function () {
                sjmCallback(body);
            });
        } else {
            sjmCallback(JSON.stringify({"payLoad":null,"reasonCode":"fail","status":null}));

        }
    });

    httpSubmitReq.on('error', function(e) {
        sjmCallback(JSON.stringify({"payLoad":null,"reasonCode":"fail","status":null}));
    });

    httpSubmitReq.end();
};


我不明白这个问题。您是否在问,如果延迟20秒,为什么
testApi()
会做一些奇怪的事情?如果您问为什么
getAccessToken()
会被多次调用,那么您必须向我们展示调用它的代码,因为这可能是问题所在。我注意到您似乎没有一种干净的方式从
getAccessToken()
返回错误。在所有情况下,您都使用对象调用回调函数,但传入的函数会查找回调函数中的错误参数,而这种情况从未发生过。这并不能解释为什么任何东西都会被调用两次,但它确实意味着在代码中错误看起来与成功相同,但不太可能是正确的。具体来说,这一行
if(accessToken)
将始终是
true
@jfriend00,实际上我还没有在这里发布完整的代码。如果看到getAccesToken函数的响应,cb(JSON.stringify({error:'',response:(body)});我正在发送response:body,如果(accessToken){}类似这样的
var-tokenInfo=JSON.parse(accessToken),我将在前面解析它;var accessToken=JSON.parse(accessToken.response);accessToken=accessToken.access\u令牌好吧,如果你没有显示适当的代码,我们真的帮不了你,特别是如何调用东西(这可能就是你的问题所在)。@jfriend00,请现在检查。我也添加了route函数,它调用getAPI函数。我不明白这个问题。您是否在问,如果延迟20秒,为什么
testApi()
会做一些奇怪的事情?如果您问为什么
getAccessToken()
会被多次调用,那么您必须向我们展示调用它的代码,因为这可能是问题所在。我注意到您似乎没有一种干净的方式从
getAccessToken()
返回错误。在所有情况下,您都使用对象调用回调函数,但传入的函数会查找回调函数中的错误参数,而这种情况从未发生过。这并不能解释为什么任何东西都会被调用两次,但它确实意味着在代码中错误看起来与成功相同,但不太可能是正确的。具体来说,这一行
if(accessToken)
将始终是
true
@jfriend00,实际上我还没有在这里发布完整的代码。如果看到getAccesToken函数的响应,cb(JSON.stringify({error:'',response:(body)});我正在发送response:body,如果(accessToken){}类似这样的
var-tokenInfo=JSON.parse(accessToken),我将在前面解析它;var accessToken=JSON.parse(accessToken.response);accessToken=accessToken.access\u令牌好吧,如果你没有显示适当的代码,我们真的帮不了你,特别是如何调用东西(这可能就是你的问题所在)。@jfriend00,请现在检查。我还添加了route函数,它调用getAPI函数
app.get('/testApi', function (req, res) {
var typeObj = {};
typeObj.apiType= 'testApi';
    try {
        getAPI(JSON.stringify(typeObj), req, res, function(response) {
            res.end(response);
        });
    } catch(err) {
        res.end(err);
    }
});