angularJS中$ q.when和$ q.defer之间的差异

Dev*_*wal 6 javascript angular-promise

我看到angularJS文件,在某些地方,评论者评论了这3行:

var deferred = $q.defer();
deferred.resolve(BrandList);
return deferred.promise;
Run Code Online (Sandbox Code Playgroud)

并替换为这一个:

return $q.when(BrandList);
Run Code Online (Sandbox Code Playgroud)

我想了解两者之间的区别.两者都有同样的目的吗?哪个应该用?

Jim*_*Dev 4

本·纳达尔在这里很好地解释了这一点。

用他的话说:

$q.when() 方法不仅创建一个立即解决的 Promise,还创建了一个立即解决的 Promise。相反,它规范化了一个可能是也可能不是“thenable”对象的值。如果给定的值是一个承诺,$q.when()将正确地链接它。如果给定值不是 Promise,$q.when() 将创建用给定值解析的 Promise。

因此,本质上它要么接受承诺,要么接受非承诺,并发挥一些魔力来确保它们要么得到解决,要么被承诺包装,以免破坏承诺链。