我看到angularJS文件,在某些地方,评论者评论了这3行:
var deferred = $q.defer();
deferred.resolve(BrandList);
return deferred.promise;
并替换为这个:
return $q.when(BrandList);
我想了解两者之间的区别。两者都有同样的目的吗?什么时候应该使用?
答案 0 :(得分:4)
Ben Nadal在解释这个here方面做得很好。
用他的话说:
$ q.when()方法并不只是创建一个立即解决的承诺;相反,它规范了一个值,该值可能是也可能不是"可能的"宾语。如果给定的值是一个promise,$ q.when()将正确地链接它。如果给定的值不是promise,$ q.when()将创建使用给定值解析的promise。
所以基本上它需要承诺或非承诺,并做一些魔术,以确保它们被解决或承诺包装,以免打破承诺链。
答案 1 :(得分:0)
$q.defer()
是合适的。通常,您会指定deferred.resolve()
和deferred.reject()
,甚至可以指定deferred.notify()
。
$q.when()
是合适的。 编辑它还将变量规范化为承诺,如果变量可能是也可能不是承诺,这很有用。看到吉姆的回答。
$q.when()
似乎适合您的情况。