2014-12-11 7 views
0

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

var retrieveUpdates = function (hash) { 
    myFunction(data) 
     .then(function(filters){ 
     return Restangular.all('retrieveUpdates').post({ filters }); 
    }); 
}; 

Но, конечно, это терпит неудачу, потому что возвращение происходит до того. Я могу «исправить» его, но он кажется уродливым (особенно, когда этот сценарий повсюду).

var retrieveUpdates = function (hash) { 
    var defer = $q.defer(); 
    myFunction(data) 
     .then(function(filters){ 
     Restangular.all('retrieveUpdates').post({ filters }).then(defer.resolve, defer.reject); 
     }); 
    return defer.promise; 
}; 

Есть ли более чистый способ сделать это?

+0

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

+0

[Что такое отложенный шаблон и как его избежать?] (Http://stackoverflow.com/questions/23803743/what-is-the-deferred-antipattern-and-how-do-i-avoid -Это) –

ответ

3

Вы что-нибудь в вашем первом примере не возвращаются, просто вернуть myFunction

var retrieveUpdates = function (hash) { 
    return myFunction(data) 
     .then(function(filters){ 
     return Restangular.all('retrieveUpdates').post({ filters }); 
    }); 
}; 
0
var retrieveUpdates = function (hash) { 
    return $q(function(resolve, reject){ 
     myFunction(data) 
      .then(function(filters){ 
       return Restangular.all('retrieveUpdates').post({ filters }).then(resolve, reject); 
      }); 
    });  
}; 
0

Вы пробовали

var retrieveUpdates = function (hash) { 
    return myFunction(data) 
     .then(function(filters){ 
     return Restangular.all('retrieveUpdates').post({ filters }); 
     }); 
}; 

, что является общим скороговоркой обещаний, обещание, всегда возвращает обещание

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