Рассмотрим Node.js цикла, чтобы выпалить HTTP запросов, например:минимального node.js синхронное ожидания по запросу HTTP
var http = require('http');
function sendOne(opts, body)
{
var post_options = {
...
}
var sender = http.request(post_options, function(res) {
// process response
});
sender.write(body)
sender.end()
return sender;
}
for(var i =0; i < maxUploadIterations; i++)
{
var body = // construct payload
var sent = sendOne(opts, body);
// somehow wait on sent...
}
Обратите внимание, что http.request объект имеет функцию обратного вызова, указанную для обработки ответа , Мой вопрос: как я могу синхронно ждать объекта «Отправленный», возвращенного из sendOne , используя встроенные примитивы Node.
Я понимаю, что есть несколько фреймворков, таких как Express и Futures, которые могут справиться с этим, но я хочу понять примитивное поведение, а не использовать «магическую» структуру.
Можно ли принимать «Отправленные» и поставить обработчик на него, как это:
var sent = ...
sent.on("complete", function() { ... });
?
Если да, то какой именно обработчик и как форматировать цикл?
Одна вещь, которую вы могли бы сделать, это обернуть ее в [Promise] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). Я знаю, что вы сказали, что вам не нужна фреймворк, но Promises являются частью ES6 и теперь являются частью node.js. – zero298
Я согласен с @ zero298, но вы также можете взглянуть на исходный код [sync-request] (https://github.com/ForbesLindesay/sync-request), упомянутый в [this] (http: // stackoverflow. com/a/32961480) вопрос. –
Вы действительно хотите делать синхронные запросы или хотите знать, как ждать асинхронных операций? Это не одно и то же. – slebetman