2015-06-01 3 views
0

Это, вероятно, классическая проблема, но мне трудно найти правильный ответ.underscore _.each и пообещать

var total_debit = {}; 
_.each(somearray, function(x) { 
    if(!total_credit[b.currency]) { 
      total_credit[b.currency] = 0; 
    } 
    // total_debit["usd"] HAS BEEN INITIALIZED! 
    total_debit["usd"] += x 
}); 

_.each(total_debit, function(td) { 
    // do some stuff 
}); 

Проблема в том, что второй _.each не выполняет итерацию, учитывая, что total_debit по-прежнему пуст.

Я попытался использовать обещание, но я, вероятно, внедрил его неправильно, потому что он не работает.

Если кто-то может привести меня к правильному пути реализации обещания для этого конкретного случая использования, я буду бесконечно благодарен.

+0

не похоже, что вы закрыли первый _.each(); ваш вопрос также не совсем ясен. Может быть, этот пост будет полезен http://stackoverflow.com/questions/25671760/q-promise-with-underscore-each – joshvito

+0

плохо писать в stackoverflow, но правильно писать в моем коде, я исправил его, спасибо, любую идею иначе? –

+0

Вы уверены, что хотите использовать массив? Если вы используете именованный индекс, с массивом, JavaScript переопределит массив на стандартный объект. Итак, почему бы просто не использовать obj. Возможно, помощь или скрипка, демонстрирующая то, что вы пытаетесь выполнить. – joshvito

ответ

1

Проблема в том, что второй _.each не повторяет, учитывая, что total_debit по-прежнему пуст.

В этом массиве нет ничего. Это length по-прежнему равен нулю. Единственное, что сейчас имеет свойство .usd (с накопленным x s от somearray).
Проблема в том, что вы здесь abusing arrays. Подчеркивание определяет, что вы используете массив, и пытается его повторить (по всем целым клавишам от 0 до .length). Но таких свойств нет. Просто используйте объект вместо этого (var total_debit = {};), а символ подчеркивания будет относиться к нему как к «карте» типа коллекции, перечисляя все ключи, включая .usd.

Я попытался использовать обещание, но я, вероятно, внедрил его неправильно, потому что он не работает.

Здесь нет никаких оснований для использования обещаний. Ничто в вашем коде (по крайней мере, в той части, которую вы показали) не является асинхронным.

+0

Массив был инициализирован, я четко определил его. Я изменил код, чтобы показать вам. –

+0

Да что бы там ни было (нет ответа на ваш вопрос?), Но он по-прежнему не используется в качестве массива. – Bergi

+0

только что отредактировал его извините Независимо от того, что он используется в качестве массива или объекта, он ничего не меняет в моей проблеме. Я согласен с тем, что концептуально я должен объявить объект, но он вообще не изменяет проблему. –

Смежные вопросы