2017-02-07 2 views
3
const items = []; 
Meteor.http.call("GET", url,function(error,result){ 
    $.each(JSON.parse(result.content), function(key, value){ 
    items.push(value) 
    }); 
}); 

код ниже возврат непустых элементов массива с длиной 0. Как я могу перебирать массив или извлечь все значения с помощью ключа на массив?
enter image description hereне пустой массив с длиной = 0 в Метеоре

+0

Где он возвращает массив длиной 0? Где вы регистрируете 'items' для получения длины 0? –

+0

console.log (items.length) = 0 + на экране вы можете увидеть «Массив [0]» –

+0

Где вы его регистрируете? Если вы регистрируете его вне функции обратного вызова Metor, вы можете увидеть это, потому что функция async еще не завершена. –

ответ

4

Meteor.http.call - это асинхронная функция с обратным вызовом. Быстрый способ, я могу думать, чтобы сделать то, что вы хотите:

const items = []; 
Meteor.http.call("GET", url,function(error,result){ 
    $.each(JSON.parse(result.content), function(key, value){ 
    items.push(value) 
    }); 
    handleItems(items); 
}); 

function handleItems(items) { 
    console.log(items.length) // 1 
    // Do what you want with the items array here. 
} 
+0

Да, когда код, выполняющийся в обратном вызове, все в порядке. Как я могу взять внешний массив обратного вызова с исходной длиной? –

+0

Проще говоря, вы не можете. Вам нужно будет обрабатывать вещи в обратном вызове, потому что код является асинхронным. Может быть, если вы скажете мне больше контекста того, что вы пытаетесь достичь, я могу предложить что-то еще? –

+0

Я пытаюсь получить данные fecth из api (json data) и отправить его в функцию бар (plot) из response-chartjs –