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
请求是 asynchronous
,i
的值将为所有请求共享。在 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
// ^^^
}
我的流星服务器上有一个 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
请求是 asynchronous
,i
的值将为所有请求共享。在 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
// ^^^
}