我有一个场景,如果它不存在我需要创建一个任务,在两个案例中都返回任务。
以下代码是否正确?
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;
});
它会起作用吗?
编辑:
看看这段代码:
.then( t => {
if (t) return t;
else return CreateTask(taskName);
});
then
总是返回一个promise,一个在回调中返回的对象的promise。如果t
是某种内容,则会返回t
,因此。then
会返回ng.IPromise<Task>
吗?但是如果t
不是,那么返回CreateTask(taskName)
,而ng.IPromise<Task>
会返回then
类型的承诺,那么返回ng.IPromise<ng.IPromise<Task>>
的是什么? then
?或ng.IPromise<Task>
展开它并返回{{1}}?
答案 0 :(得分:1)
是的,绝对可以在.then
中返回一个承诺 - 这就是你执行连续异步操作的方法。
如果您在.then
中返回承诺,那么当履行此承诺时,结果将被提供给下一个链接的.then
。
如果您返回(非承诺)值,则此值将被赋予下一个链接.then
。
主要的是没有一个API有时会返回一个承诺,有时会返回一个值 - 但这不是你所拥有的,所以你没事。
这里有illustrative example (plunker)与你的相似。