javascript - AngularJS : promise chain not deferring past 2nd function

标签 javascript angularjs promise deferred angular-promise

作为扩展of a question I asked earlier (感谢您的帮助!),
我在执行第二个返回的 promise 时遇到了困难(连续 3 个或更多)
我已经查看了this , this但无法获得有关我当前代码的任何线索

应用程序和 Controller 看起来像:

myApp.controller('Controller_1', function($scope, myService) {

    var myName = "Ben";

    myService.slowService(myName)
    .then(function(result){myService.slowService2(result);})
    .then(function(result){myService.fastService(result);});

    $scope.myName = myName;
});

服务提供商看起来像:

myApp.service('myService', function($q, $timeout) {

    this.slowService = function (name) {
        var deferred = $q.defer();
        console.log('Start of slowService1:', name, Date.now());

        $timeout(function() {
            name = 'Hello, ' + name + " is learning Angularjs";
            alert(name); 
            deferred.resolve(name);
                console.log('End of slowService1 timeout:', name, Date.now());
        }, 1500);

        return deferred.promise;
    };

    this.slowService2 = function (name) {
        var deferred = $q.defer();
        console.log('Start of slowService2:', name, Date.now());

        $timeout(function() {
            name = 'Hello, ' + name + " is learning Angularjs";
            alert(name); 
            deferred.resolve(name);
                console.log('End of slowService2 timeout:', name, Date.now());
        }, 1000);

        return deferred.promise;
    };

    this.fastService = function(name){ 
        var deferred = $q.defer();
            console.log('Start of fastService:', name, Date.now());
        alert('Hello ' + name + ' - you are quick!'); 
        deferred.resolve();
            console.log('End of fastService:', name, Date.now());
        return deferred.promise;
    };
});

控制台输出如下:

Start of slowService1: Ben 1420877247858
End of slowService1 timeout: Hello, Ben is learning Angularjs 1420877250982
Start of slowService2: Hello, Ben is learning Angularjs 1420877250983
Start of fastService: undefined 1420877250984
End of fastService: undefined 1420877251641
End of slowService2 timeout: Hello, Hello, Ben is learning Angularjs is learning Angularjs 1420877254148

因此,当第一个 slowService1 $q.defer() 工作时,第三个函数 fastService 不会等待第二个 slowService2 延迟在开始之前要解决的对象...?

jsfiddle 是 here

PS $timeout 仅用于模拟 $http 调用和 SQLite 查询等。

最佳答案

您需要返回 promise ,以便可以与.then链接:

myService.slowService(myName)
    .then(function(result){
        return myService.slowService2(result);
     })
    .then(function(result){
        myService.fastService(result);
     });

关于javascript - AngularJS : promise chain not deferring past 2nd function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27874174/

相关文章:

javascript - angular.js 防止空数

javascript - 带有 ng-transclude 的 Angular Directive(指令)

javascript - 递归函数内部的异步调用

javascript - 为什么jQuery或诸如getElementById之类的DOM方法找不到元素?

javascript - 检查 AngularJS 模块是否被引导

javascript - 如何在函数中预先计算值查找

javascript - Angular js,将数据作为参数从 View 传递到 Controller

javascript - Angular : Promise dependant on other promises in routing

angularjs - 如何在 Jasmine 中用 $promise.then 模拟 AngularJS $resource

javascript - 如何拥有一个 jQuery 插件的多个实例