Javascript 困惑:$q.when()还是只调用没有它的函数?

Javascript 困惑:$q.when()还是只调用没有它的函数?,javascript,angularjs,promise,q,Javascript,Angularjs,Promise,Q,一般来说,我对AngularJS和JavaScript比较陌生。最近我一直在尝试通过创建自己的项目来学习。我注意到,我的应用程序在功能上与以下代码没有明显区别: $q.when(authenticationService.login($scope.username, $scope.password)) .then(function (response) { }, function (error) {

一般来说,我对AngularJS和JavaScript比较陌生。最近我一直在尝试通过创建自己的项目来学习。我注意到,我的应用程序在功能上与以下代码没有明显区别:

$q.when(authenticationService.login($scope.username, $scope.password))
                    .then(function (response) {

                    }, function (error) {

                    });
这是:

authenticationService.login($scope.username, $scope.password)
                    .then(function (response) {

                    }, function (error) {

                    });
似乎$q.when并不是那么必要。我读了一些书,我认为没有什么区别可能是因为我的
authenticationService.login()
返回了一个承诺。 但这仅仅是为了这个吗?$q.when()只是为了确保里面的东西都是承诺吗?(如果是,它就离开它,如果不是,它就用承诺来包装它)? 其他可能的用例是什么? 谢谢

似乎很清楚这一点:

将可能是值或(第三方)的对象包装为$q承诺。当您处理的对象可能是承诺,也可能不是承诺,或者承诺来自不可信任的来源时,这非常有用

如果术语“thenable”(他们写的是“then-able”)不熟悉,那么值得回顾一下。

似乎很清楚这一点:

将可能是值或(第三方)的对象包装为$q承诺。当您处理的对象可能是承诺,也可能不是承诺,或者承诺来自不可信任的来源时,这非常有用


如果术语“thenable”(他们写的是“then-able”)不熟悉,那么值得回顾一下。

因为第二个版本有一个有效的
then()
,它表明.login()返回一个承诺,使
$q成为多余的。when()
是$q。when()只用于确保里面的东西都是承诺?(如果是,它就离开它,如果不是,它就把它包装成一个承诺)?“-是的,就是这样。所以当你知道被调用的函数总是返回一个承诺时,你不需要也不应该使用
$q.when
。因为第二个版本有一个有效的
then()
它表明.login()返回一个承诺,使
$q.when()
redundant“是$q.when()仅用于确保里面的东西都是承诺吗?(因此,如果是,它就离开承诺,如果不是,它就把它包装在承诺中)?”-是的,确实如此。因此,当您知道被调用函数总是返回一个承诺时,您不需要也不应该使用
$q。当
时。查看规范是一个好主意。在学习承诺方面,我发现MDN是一个很好的资源,可以帮助您轻松实现承诺。查看规范是一个好主意。在学习承诺,我发现MDN是一个很好的资源,可以帮助您轻松地使用它。