2015-04-17 5 views
1

Я вызываю функцию async, которая не «принадлежит» мне внутри цикла. Мне нужно получить переменную внутри функции «then». Вот как я это делаю:Передать переменную на обещанную функцию

for(var int = 0; int < attachments.length; int++) { 
     dp.getAttachment(attachments[int]).then(function (response) { 
      console.log(int); 
     }); 
    } 

Как я могу отправить Int так что я могу получить его внутри функции?

ответ

4

Проблема заключается в неправильном использовании closure variable in a loop.

Вот так у вас есть массив, вы можете создать локальное закрытие с помощью forEach() перебрать его

attachments.forEach(function (item, it) { 
    dp.getAttachment(item).then(function (response) { 
     console.log(int); 
    }); 
}) 
+0

Очень элегантное решение! благодаря – ncohen

1

Используя силу закрытия, вы можете обеспечить копия каждого значения переменной int доступна при вызове обратного вызова then.

for(var int = 0; int < attachments.length; int++) { 
    (function(int) { 
     dp.getAttachment(attachments[int]).then(function (response) { 
      console.log(int); 
     }); 
    })(int); 
} 
Смежные вопросы