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

Вы не знаете, когда getSchedule() сделано, если вы не используете .then() обработчик на нем.

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

}); 
// here results are not yet valid 

Вы, вероятно, пытается взглянуть на ваш выше области видимости results ПЕРЕД асинхронной операции завершена. Вам необходимо использовать .then(), чтобы вы знали, когда операция выполнена, и данные действительны.

+0

hey @ 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 являются строками, а не цифрами?
  • Проверьте, что data[0].mscd.g - это правильная вещь для фильтрации.