我的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/

10-11 09:14