2017-01-09 27 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

嘿@ jfriend00,我已經實現了你的建議,但是我還沒有得到結果。我猜我的問題在於我的getMonthlySchedule函數中的某處,特別是當我迭代前一個承諾getData()給出的數據時; –

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屬性是String,不是Number?
  • 檢查data[0].mscd.g是否正確過濾。