HTTP.post() 循环回调

HTTP.post() callback in loop

我的流星服务器上有一个 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] 传递给回调函数?

由于 http 请求是 asynchronousi 的值将为所有请求共享。在 for 循环中使用 closures。它将为每次迭代保留一份单独的 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
    // ^^^
}