所以我有一个API (在Nginx上用PHP写的)。我使用Node JS来向该API发送请求。有时,API需要5-7秒才能完成它需要做的事情。
问题是Node JS不会等待完整的响应到达。
http.get(url, function(response){
// called right away instead of waiting until it finishes
});
我已经尝试过使用.end()和.close()事件--没有成功。如何让NodeJS等待?or...how :我让PHP通知节点“嘿,现在我完成了”。谢谢。
重要的一点是:当我尝试使用API时,它确实会等待完整的响应。
发布于 2015-08-21 10:12:43
当使用原生http客户端时,您必须在解析数据之前手动追加数据块。由于这个原因,大多数人不使用原生http客户端。您想要使用类似于request
模块的东西。
npm install request
紧接着是
var request = require('request');
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
})
发布于 2015-08-21 12:21:29
NodeJS以完全异步的方式工作。这意味着所有代码都是从上到下执行的,不需要等待任何带有回调的函数。
来自PHP,您希望它能做以下事情:
ExecuteThis();
ThenThis();
AndFinallyThis();
但NodeJS不会这样做。它将立即开始执行所有操作,然后返回结果。这类似于运行以下命令:
php ExecuteThis.php && php ThenThis.php && php AndFinallyThis.php
您需要的是一个asynchronous waterfall、一个callback、一个Promise或类似的结构,再加上一个HTTP request。
https://stackoverflow.com/questions/32131050
复制相似问题