Angular Promises:不同技术的最佳实践和 Pros/Cons

Angular Promises: Best Practices and Pros/Cons of Different Techniques

我正在学习 Angular 并且我遇到了两种调用 return 承诺的方法。我想知道当您使用每种方法时,一种方法是否优于另一种方法 and/or。

第一个技巧:

function getSomeDataFromServer() {
    var deferred = $q.defer();

    if (myData) {
        // call to backend was previously made and myData is already loaded 
        deferred.resolve(myData);
    } else {
        // get data from server
        $http.get(my_url_endpoint).then(function(response) {
            // cacheResult() will set myData = response.data
            deferred.resolve(cacheResult(response));
        });
    }

    return deferred.promise;
}

第二个技巧:

function getSomeDataFromServer() {

    if (myData) {
        // call to backend was previously made and myData is already loaded 
        return $q.when(myData);
    } else {
        // get data from server
        return $http.get(my_url_endpoint).then(function(response) {
            // cacheResult() will set myData = response.data
            return cacheResult(response);
        });
    }
}

总是喜欢第二个选项。第一个选项是一种反模式,通常在开发人员不完全理解承诺的性质时出现。使用延迟对象 (var deferred = $q.defer();) when you have some asynchronous code that uses callbacks but needs to work with your promise based code.

您在 Angular return promises 中执行的大多数异步操作,因此您通常只会在使用依赖于回调的第 3 方库时使用延迟。

在此示例中,$http 本身 return 是一个承诺,因此无需创建新的延迟对象。返回 $http 承诺本身就足够了。