循环中的HTTP.post()回调

时间:2015-06-25 10:17:30

标签: javascript http meteor callback

我的流星服务器上有一个HTTP.post()循环:

for (var i = 0; i < smsMessages.length; i++) {
    HTTP.post("https://smsapiaddress/sms.do", smsMesseges[i], function(error, result) {
        if (error) {
            setErrorInDatabase(smsMessages[i]);
        }
        if (result) {
            setResultInDatabase(smsMessages[i]);
        }
    });

如何轻松地将正确的smsMessages [i]传递给回调函数?

1 个答案:

答案 0 :(得分:2)

http请求为asynchronous时,将为所有请求共享i的值。在closures循环中使用for。它将为每次迭代保留i的单独副本。

请参阅代码中突出显示的注释:

for (var i = 0; i < smsMessages.length; i++) {

    (function(i) {
    // ^^^^^^^^^^^
        HTTP.post("https://smsapiaddress/sms.do", smsMessages[i], function(error, result) {
            if (error) {
                setErrorInDatabase(smsMessages[i]);
            }
            if (result) {
                setResultInDatabase(smsMessages[i]);
            }
        });
    }(i)); // call the function with the current value of i
    // ^^^
}