2016-05-09 1 views
3

Я звоню в службу REST, которая возвращает true или false.Угловая перспектива разницы localhost vs развернута

function topLevelClosed($stateParams) { 
    var id = $stateParams.id; 
    return id ? Traject.topLevelClosed({id: id}).$promise : false; 
} 

var topLevelClosed = { 
    method: 'GET', 
    url: trajectURL + ':id/topLevelClosed' 
}; 

topLevelClosed - метод $ resource. Это отлично работает с localhost. Вершина topLevelClosed var является «false», которая равна значению, возвращаемому вызовом REST. Однако при развертывании (в Google App Engine) я получаю результат «завернутый в обещание», как показано на изображении ниже. Однако, когда я вызываю REST-сервис через окно браузера, он возвращает false, как следует.

promise result when deployed

promise result on localhost

Почему не будет при развертывании этой работы?

ответ

2

Поведение, которое вы описываете, - это то, что я ожидал бы от этого кода. Когда функция возвращает обещание ваш вызов будет выглядеть следующим образом

topLevelClosed($stateParams).then(function(value){ 
    /* do something with value */ 
}); 

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

Чтобы получить согласованное поведение я всегда возвращался обещание, как это:

function topLevelClosed($stateParams) { 
    var deferred = $q.defer(); 
    if(id){ 
    Traject.topLevelClosed({id: id}).$promise.then(function(value){ 
     deferred.resolve(value); 
    }); 
    } else { 
    deferred.resolve(false); 
    } 
    return $q.promise; 
} 

Ну это не так хорошо, как я надеялся, что это будет, но вы можете улучшить его. Тем не менее я рекомендую вам всегда использовать последовательный тип возвращаемого значения. Когда вы смешиваете логики и обещания, вам нужно проанализировать тип возвращаемого значения, прежде чем продолжить.

+0

Он вводит '$ stateParams', так что это, скорее всего, метод разрешения. В способе решения не имеет значения, верните ли вы обещание или нет, если это обещание, что маршрутизатор разрешит его для вас, так что вы всегда будете в конечном итоге либо с разрешенным обещанием, либо в этом случае примитивным 'false ' –

+0

@NexusDuck Возможно, вам захочется подробно рассказать о том, как результат метода $ resource заканчивается в автоматическом разрешении ui-router. Я не вижу здесь инъекции. Единственное, что я вижу, это функция с параметром, и я не знаю, как называется эта функция. – konqi

+0

Ну, [$ stateParams] (https://github.com/angular-ui/ui-router/wiki/URL-Routing#user-content-stateparams-service) - это сервис ui-router, обычно используемый для функций разрешения –

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