2015-06-01 100 views
0

这可能是一个经典问题,但我很难找到一个正确的答案。下划线_每个和承诺

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仍然是空的。

我试图使用Promise,但我可能以错误的方式实现它,因为它不工作。

如果任何人都可以引导我以正确的方式实现这个特定用例的承诺,我将永远感激。

+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属性(积累xsomearray)。
问题是你在这里是abusing arrays。 Underscore检测到您正在使用阵列,并尝试迭代它(通过从0.length的所有整数键)。但是没有这样的属性。 只需使用对象(var total_debit = {};),下划线将它视为“地图”类型的集合,枚举包括.usd在内的所有键。

我试图用的希望,但是我可能执行了错误的方式造成它不工作。

在这里绝对没有理由使用承诺。您的代码中没有任何内容(至少在您展示的部分中)是异步的。

+0

该数组已被初始化,我清楚地指定了它。我修改了代码来向你展示。 –

+0

是的(无论你的问题没有编辑?),但它仍然不能用作数组。 – Bergi

+0

刚刚编辑它抱歉 不管它用作数组还是对象,它都不会改变我的问题。 我同意在概念上我应该声明一个对象,但它根本不会改变这个问题。 –