2017-01-09 5 views
0

データが新しい配列「プッシュ」にプッシュされない理由を理解できません。 newArr [0] .mscd.g [i]はいくつかのオブジェクトのリストです。プロミスチェーンでデータを新しい配列にプッシュする際に問題が発生する

var axios = require('axios'); 
var moment = require('moment'); 
var _ = require('lodash'); 

var getData = function() { 
    return getNBASchedule().then(function(payload) { 
     return filterByMonth('January', payload); 
    }).then(function(result) { 
     return result 
    }); 
} 
.... 

getDataはbaseURLからデータを取得し、オブジェクトのリストを返します。

var getMonthlySchedule = function(data){ 
    var results = []; 
    var newArr = data.slice(0, data.length); 
    for (var i = 0; i <= newArr[0].mscd.g.length; i++) { 
    if (newArr[0].mscd.g[i].v.tid === 1610612744 || newArr[0].mscd.g[i].h.tid === 1610612744) { 
     results.push(newArr[0].mscd.g[i]); <---- //does not seem to work 
     // however if I were to console.log(newArr[0].mscd.g[i], 
     // I would see the list of objects) 
    } 
    } 
    return results; <-- //when i console at this point here, it is blank 
}; 

var getSchedule = function() { 
    return getData().then(function(pl) { 
    return getMonthlySchedule(pl) 
    }) 
}; 

var monthlyResults = function() { 
    return getSchedule().then(function(r) { 
    console.log("result", r) 
    return r 
    }); 
}; 

monthlyResults(); 

答えて

1

あなたは、あなたがそれに.then()ハンドラを使用しない限りgetSchedule()が行われたときに知りません。非同期操作が終了する前にあなたはおそらく、あなたの高い見しようとしている

getSchedule().then(function(data) { 
    // in here results are valid 

}); 
// here results are not yet valid 

resultsスコープ。 .then()を使用して、操作が完了してデータが有効であることがわかっている必要があります。次のように

+0

私はあなたの提案を実装しましたが、まだ結果が得られていません。私は、以前の約束getData()によって与えられたデータを繰り返し処理するときに、私の問題がgetMonthlySchedule関数のどこかにあると推測しています。 –

1

あなたのコードは簡素化する必要があります

var getData = function() { 
    return getNBASchedule().then(function(payload) { 
     return filterByMonth('January', payload); 
    }); 
} 

var getMonthlySchedule = function(data) { 
    return data[0].mscd.g.filter(function(item) { 
     return item.v.tid === 1610612744 || item.h.tid === 1610612744; 
    }); 
}; 

var monthlyResults = function() { 
    return getData() 
    .then(getMonthlySchedule) 
    .then(function(r) { 
     console.log('result', r); 
     return r; 
    }); 
}; 

monthlyResults(); 

これは、問題を解決することがあります。そうでない場合は、

  • フィルタテストを確認してください。たぶんそれらの.tidプロパティはNumberではなくStringですか?
  • data[0].mscd.gがフィルタリングするのが正しいことを確認してください。
関連する問題