我的Meteor服务器上有一个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
的值将为所有请求共享。在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
// ^^^
}
关于javascript - 循环中的HTTP.post()回调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31047525/