所以我有一个API(用Nginx编写的PHP)。 我使用Node JS来向该API发送请求。 有时需要5-7秒,直到API完成它需要做的事情。
问题是Node JS不会等待完整的响应到达。
http.get(url, function(response){
// called right away instead of waiting until it finishes
});
我已经尝试过使用.end()& .close()事件 - 没有运气。 如何让NodeJS等待?或者......如何让PHP通知节点“嘿,现在我已经完成了”。 感谢。
一件重要的事情:当我尝试使用CURL到API时,它会等待完整的响应。
答案 0 :(得分:1)
使用本机http客户端时,您必须在解析数据之前手动附加块。因此,大多数人不使用本机http客户端。您想使用request
模块之类的东西。
npm install request
其次是
var request = require('request');
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
})
答案 1 :(得分:1)
NodeJS以完全异步的方式工作。这意味着所有代码都是从上到下执行的,无需等待任何带回调的函数。
来自PHP,您希望它能够做到:
ExecuteThis();
ThenThis();
AndFinallyThis();
但NodeJS并不这样做。它会立即开始执行所有内容然后返回结果。这就像运行此命令一样:
php ExecuteThis.php && php ThenThis.php && php AndFinallyThis.php
您想要的是asynchronous waterfall,callback,Promise或此类结构,以及HTTP request。