Angular:$ q.defer()vs $ q()

csv*_*van 4 javascript angularjs q angular-promise

在Angular中,以下片段似乎是等效的:

let deferred = $q.defer();
if(whatever) {
   deferred.resolve('something');
}
else {
   deferred.reject('nah');
}
return deferred.promise;
Run Code Online (Sandbox Code Playgroud)

return $q((resolve,reject) => {
    if(whatever) {
       resolve('something');
    }
    else {
       reject('nah');
    }
});
Run Code Online (Sandbox Code Playgroud)

我的问题:如果它们不相同,它们有何不同?如果它们是等价的,是否有令人信服的理由选择一个而不是另一个?

bur*_*ikt 5

您发布的第二个版本是遵循Promise/A + -Specification的版本.

从功能的角度来看,两个版本都是等价的.第一个版本(在我看来)使得更容易将异步代码读取为同步代码,但第二个版本使用已进入ES2015的语法,并且也将成为ES6的一部分,即javascript的下一个版本.

因此,选择取决于您,但您可以期待在未来看到更多第二种类型的promise语法.