所以我有一个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等待?还是……我如何让PHP通知节点"嘿,现在我已经完成了"。谢谢。
有一点很重要:当我尝试CURL到API时,它会等待完整的响应。
使用本地http客户端时,您必须在解析数据之前手动添加块。由于这个原因,大多数人不使用本机http客户端。您想使用类似request
模块的东西。
npm install request
紧随其后var request = require('request');
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
})
NodeJS以完全异步的方式工作。这意味着所有的代码都被自上而下地执行,而不需要等待任何带有回调的函数。
来自PHP,你希望它做:
ExecuteThis();
ThenThis();
AndFinallyThis();
但是NodeJS不这样做。它会一次开始执行所有的东西然后返回结果。就像运行这个命令:
php ExecuteThis.php && php ThenThis.php && php AndFinallyThis.php
你想要的是一个异步瀑布,一个回调,一个承诺,或者类似的结构,再加上一个HTTP请求。