アンダースコアが終了したときのコールバックはありますか?それは_.eachループです。なぜなら、console log直後に明らかに、各ループで入力している配列が利用できないためです。これはネストされた_.eachループからのものです。
_.each(data.recipe, function(recipeItem) {
    var recipeMap = that.get('recipeMap');
    recipeMap[recipeItem.id] = { id: recipeItem.id, quantity: recipeItem.quantity };
});
console.log(that.get('recipeMap')); //not ready yet.