Этот вопрос задан по-разному уже здесь, и я хорошо понимаю проблему. Общее решение - вызывать обратные вызовы для обработки HTTP-результатов, но я специально хочу этого избежать.Ожидание асинхронного 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) {}" петли тоже не имеет значения.
Несомненно, мне не нужно перерабатывать всю систему плагинов, чтобы справиться с другим подходом, а обратный вызов обновления «сделанного» флага будет работать, как-то?
Является ли ваша система плагина написанной на JavaScript? –
Прошу прощения, но если вы пытаетесь использовать синхронный цикл для проверки асинхронного результата, вы не очень хорошо понимаете проблему. Кажется, что вы пытаетесь сделать, _return_ результат от асинхронного вызова, невозможно в javascript (afaik). Любой синхронный код будет либо блокировать весь поток (предотвращая выполнение запроса), либо возвращаться до того, как будет выполнен запрос. –
Я полагаю, что можно заставить его работать, взломав некоторые [process.binding] (http://stackoverflow.com/questions/17336779/if-nodejs-uses-non-blocking-io-how-is-fs-readfilesync-implemented), но я бы не рекомендовал его. –