簡體   English   中英

最小的node.js同步等待HTTP請求

[英]minimal node.js synchronous wait on http request

考慮一個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返回的“已發送”對象

我知道有很多框架可以處理此問題,例如Express和Futures,但是我想了解原始行為,而不是使用“魔術”框架。

是否可以采用“已發送”並在其上放置一個處理程序,如下所示:

var sent = ...
sent.on("complete", function() { ... } );

如果是這樣,究竟是哪個處理程序以及如何使用它格式化循環?

另一個選擇是使用老式的回調方法。

var http = require('http');

function sendOne(opts, body, next) {
    var post_options = {
        // ...
    };

    var sender = http.request(post_options, function (res) {
        // process response
        next();
    });

    sender.write(body);
    sender.end();
}

var maxUploadIterations = 100;
function next(index) {
    // termination condition
    if (index >= maxUploadIterations) {
        return;
    }

    // setup next callback
    var nextCallback = next.bind(null, index + 1);

    // get these from wherever
    var opts = {};
    var body = {};
    sendOne(opts, body, nextCallback);
}

next(0);

如果之后還有更多工作要做,則可以將終止條件更改為調用其他內容,而不是返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM