2016-07-09 4 views
-1

Я пытаюсь запустить следующую функциюфункция Javascript не возвращается ожидаемое значение

var getjson = function(){ 
    $.get('/api/todos/testing', function(results){ 
     return results; 
    }); 
} 

Результаты должны выглядеть следующим образом:

[{_id: "57803baf0a76d5c924b18ca2", username: "testing", toDoTask: "Buy Water", isDone: false, __v: 0},{_id: "57803baf0a76d5c924b18ca3", username: "testing", toDoTask: "Buy Milk", isDone: false, __v: 0}] 

Когда я пытаюсь вызвать функцию для добавления список для моего углового контроллера

angular.module('firstapp').controller('todos', function(){ 
    this.list= getjson(); 
}); 

Список не сохраняет значения, возвращаемые функцией.

Я уверен, что проблема связана с тем, как я пытаюсь вернуть результаты, но я не мог найти, что это правильный способ сделать это.

ответ

2

$.get является асинхронным, поэтому, когда вы запустили getjson(), код по-прежнему будет выполнять операцию GET, но он немедленно вернется.

Поскольку вы не определили для него return, по умолчанию javascript вернет вам undefined, что и будет this.list.

Документация для $.get: https://api.jquery.com/jquery.get/

Чтобы исправить вашу проблему самым простым способом было бы сделать getjson() принять функцию обратного вызова.

Пример:

var getjson = function(done){ 
    $.get('/api/todos/testing', function(results){ 
     return done(results); 
    }); 
} 

воззовет getjson() с функцией, которая устанавливает list.

angular.module('firstapp').controller('todos', function(){ 
    getjson(function(results) { this.list = results; })); 
}); 
+0

Не возвращает ли это обещание? Если это так, этот ответ может быть более полезным, если бы он показал, как передать функцию разрешения на обещание. – danh

Смежные вопросы