【发布时间】:2016-05-20 07:11:07
【问题描述】:
考虑一个 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 对象具有指定用于处理响应的回调函数。我的问题是如何使用内置的 Node 原语同步等待从 sendOne 返回的“Sent”对象。
我了解 Express 和 Futures 等多个框架可以处理此问题,但我想了解原始行为而不是使用“魔术”框架。
是否可以像这样接受“已发送”并在其上放置一个处理程序:
var sent = ...
sent.on("complete", function() { ... } );
?
如果是这样,究竟是哪个处理程序以及如何用它格式化循环?
【问题讨论】:
-
您可以做的一件事是将其包装在Promise 中。我知道你说过你不想要一个框架,但 Promises 是 ES6 的一部分,现在是 node.js 的一部分。
-
我同意@zero298 但你也可以看看this问题中提到的sync-request的源代码。
-
你真的要进行同步请求还是想知道如何等待异步操作?它们不是一回事。
-
我想知道如何等待异步操作。理想情况下,我想知道如何对任意异步操作集合进行同步等待。
-
另外,我希望能够改变该集合的内容。所以我不一定要全部解雇并等待。我希望能够解雇 N 并等待。然后触发 N+1...K 并等待,等等。因此,我试图了解原语节点提供的同步以及如何使用它来构建迭代结构。
标签: javascript node.js