У меня есть сценарий, когда мне нужно создать задачу, если она не существует, возвращая задачу в обоих случаях.Могу ли я вернуть обещание от .then() обратного вызова?
Правильный ли приведенный ниже код?
CreateTaskIfNotExists(taskName: string): ng.IPromise<Task> {
return this.GetTask(taskName)
.then(t => {
if (t) return t;
else return this.CreateTask(taskName);
});
}
CreateTask(taskName: string): ng.IPromise<Task> {
// use $http to call Rest Web Service to create the task
// and return promise
}
GetTask(taskName: string): ng.IPromise<Task> {
// use $http to call Rest Web Service to getthe task
// and return promise
}
выше код в службе, которую я называю из контроллера:
TaskService.CreateTaskIfNotExists(taskName)
.then(task => {
$scope.Task = task;
});
Будет ли она работать?
EDIT:
Только посмотрите на этот кусок кода:
.then(t => {
if (t) return t;
else return CreateTask(taskName);
});
then
всегда возвращает обещание, обещание объекта возвращается в обратный вызов. если t
что-то тогда возвращает t
, поэтому. then
возвращение ng.IPromise<Task>
правый ?. Но если t
не что-то, то возвращает CreateTask(taskName)
, который в свою очередь возвращает обещание типа ng.IPromise<Task>
, так что возвращает then
? ng.IPromise<ng.IPromise<Task>>
? или then
разворачивает его и возвращает ng.IPromise<Task>
?
Что вы пытаетесь достичь? –
Создайте задачу (или что-то еще), если она не существует с минимально возможным кодом. Я могу написать его с помощью $ q.defer, но для этого требуется более шаблонный код. –
Я просто спрашиваю, правильный ли код: if (t) return t; else return CreateTask (taskName); Я возвращаю объект, если он существует, или возвращает обещание, которое его создает. –