已经在这里以各种方式提出了这个问题,我很好地理解了这个问题。一般的解决方案是调用回调来处理 HTTP 结果,但我特别想避免这种情况。
我想我可以使用“我们完成了吗”标志来保持工作正常,但这并没有按预期工作。
//
// Test the IP the comment came-from.
//
exports.testJSON = function ( obj )
{
var ip = obj['ip'] || "";
var result = null;
var done = false;
//
// The URL request we're going to make
//
var options = {
host: 'www.stopforumspam.com',
port: 80,
path: '/api?ip=' + ip
};
//
// A GET request
//
var re = http.request(options, function(res) {
var str = '';
res.on('data', function(chunk) {
console.log( "Got data " + chunk );
str += chunk;
});
res.on('end', function() {
console.log( "Got END" );
result = "..... ";
done = true;
});
}).on('error', function(e) {
done = true;
console.log("Got error: ", e);
});
re.end();
while( ! done ) {
}
return( result );
};
可悲的是,这不起作用 - 忙碌的外观只是无限期地旋转,而且我没有看到控制台日志记录表明我正在接收数据。
将“process.nextTick()”添加到“while(!done){}”循环中也没有什么区别。
当然,我不需要重新设计我的整个插件系统来应对不同的方法,并且更新“完成”标志的回调会起作用,不知何故?