Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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 节点请求无法等待响应,即使使用回调也是如此_Javascript_Node.js_Callback_Httprequest - Fatal编程技术网

Javascript 节点请求无法等待响应,即使使用回调也是如此

Javascript 节点请求无法等待响应,即使使用回调也是如此,javascript,node.js,callback,httprequest,Javascript,Node.js,Callback,Httprequest,这是我正在测试的代码,它不会每次都返回响应。就像我运行它20次一样,只有一次我可以得到身体的输出。其他时候,我没有得到任何输出,甚至没有看到任何错误消息 我想这是因为请求运行得太快,无法得到响应 有人能帮我吗? 谢谢 我在函数中添加了输出(err、response、body),如下所示。但什么也没得到 get_from_google : function (callback) { request('http://www.google.com', function(err, res, bo

这是我正在测试的代码,它不会每次都返回响应。就像我运行它20次一样,只有一次我可以得到身体的输出。其他时候,我没有得到任何输出,甚至没有看到任何错误消息

我想这是因为请求运行得太快,无法得到响应

有人能帮我吗? 谢谢

我在函数中添加了输出(err、response、body),如下所示。但什么也没得到

get_from_google : function (callback) {
    request('http://www.google.com', function(err, res, body) {
        console.info('In the callback');
        if (err)
            return callback(err);
        if (res.statusCode === 200) {
            callback(new Error('Nothing got back'), body);
        } else {
            callback(new Error('Unexpected status code: ' + res.statusCode));
        }
    });
}
以下是控制台中的输出:

Starting selenium standalone server...
[launcher] Running 1 instances of WebDriver
Selenium standalone server started at http://10.33.203.210:53537/wd/hub
Started
.


Ran 1 of 3 specs
1 spec, 0 failures
Finished in 0.019 seconds
Shutting down selenium standalone server.
[launcher] 0 instance(s) of WebDriver still running
[launcher] chrome #01 passed

Process finished with exit code 0

这里有几个问题:

  • 请求错误被忽略。例如,如果连接到服务器时出现问题,则可能会发生错误
  • 添加
    主体
    事件处理程序是不必要的,因为您已经有了另一个回调
  • 最好使用
    (err,result[,…resultn])
    的节点样式回调签名
  • 考虑到这些因素,您可以尝试以下方法:

    get_from_google: function(callback) {
      request('http://www.google.com', function(err, res, body) {
        if (err)
          return callback(err);
        if (res.statusCode === 200) {
          callback(null, body);
        } else {
          callback(new Error('Unexpected status code: ' + res.statusCode));
        }
      });
    }
    

    嗯,嗯,您没有在else语句中调用回调(我不明白您为什么要监听
    body
    )。什么是请求?请求模块还是什么?是的,我正在使用npm请求模块。我在这里遇到的问题是没有得到任何回调。函数中的代码(错误、响应、正文)没有得到执行。您能确切地说明您是如何测试这个特定函数的吗?也许您不是在等待函数完成后才将测试标记为已完成?解决方案是使用promise.controlfolw.wait来等待承诺。我已经尝试过了,但仍然无法每次都得到响应。测试在0.019秒内完成。完成请求是否太快?因为我试图在函数中输出body(err、res、body)。然而,我没有得到任何输出。
    get_from_google: function(callback) {
      request('http://www.google.com', function(err, res, body) {
        if (err)
          return callback(err);
        if (res.statusCode === 200) {
          callback(null, body);
        } else {
          callback(new Error('Unexpected status code: ' + res.statusCode));
        }
      });
    }