Синхронный вызов AngularJS

МЕТОД 1

{
    var myform = getForm();
    var myVar = $sce.trustAsHtml(myForm);
}

МЕТОД 2

var getForm = function () {
    var form = "";
    //API CALL here using custom service
    .then(
    function (response) {
          form = //processing here
    },
    function (response) {
    }
    return form;
};

В приведенном ниже сценарии я вызываю метод getForm() и мне нужны обработанные данные из переменной формы. Но он всегда возвращается пустым перед обработкой.

Как я могу синхронизировать этот вызов, чтобы я мог getForm() возвращать обработанные данные и возвращаться к method 1


person Gaurravs    schedule 18.08.2017    source источник
comment
getForm должен возвращать промис от пользовательского сервиса, а не делать then сам по себе. выполните then в методе 1.   -  person Claies    schedule 18.08.2017
comment
Вы не можете. Вам нужно понять и принять, что вызов API является асинхронным, и с этим справиться. Метод не может возвращать данные. Он может возвращать обещание или наблюдаемые данные, но не данные.   -  person JB Nizet    schedule 18.08.2017
comment
Прочитайте Вы упускаете суть обещаний.   -  person georgeawg    schedule 18.08.2017


Ответы (1)


Разберитесь с обещанием здесь:

var myform = getForm().then(
    (form) => {
       $sce.trustAsHtml($sce.valueOf(form))
    },
    (error) => {
       // getForm - fail
    });

МЕТОД 2 - вернуть обещание вместо значения формы

var getForm = function () {
    return //API CALL here using custom service
};

Или еще проще:

yourService.serviceMethod().then(
    (form) => {
       $sce.trustAsHtml(form)
    },
    (error) => {
       // getForm - fail
});
person Krzysztof Raciniewski    schedule 18.08.2017
comment
спасибо помогло. единственное изменение, которое мне нужно было сделать, это $sce.trustAsHtml($sce.valueOf(form)) - person Gaurravs; 18.08.2017