Angularjs 角度承诺延迟未按预期工作

Angularjs 角度承诺延迟未按预期工作,angularjs,promise,angular-promise,Angularjs,Promise,Angular Promise,很抱歉,我不能在这里显示完整的代码,我产生了以下代码片段。 我有一个服务和控制器。 在服务中,我向我的组服务添加了2秒超时,以测试微调器加载 但不知怎的,在控制器中,我的代码立即运行,不需要等待2秒钟 我做了3个断点,我期望的执行顺序是:2->1->3 但是,结果是2->3->1 这是我的服务 groupService.get = function() { var deffered = $q.defer(); deffered.promise = $getMyDataStuffP

很抱歉,我不能在这里显示完整的代码,我产生了以下代码片段。 我有一个服务和控制器。 在服务中,我向我的组服务添加了2秒超时,以测试微调器加载

但不知怎的,在控制器中,我的代码立即运行,不需要等待2秒钟

我做了3个断点,我期望的执行顺序是:2->1->3 但是,结果是2->3->1

这是我的服务

groupService.get = function() {
    var deffered = $q.defer();
    deffered.promise = $getMyDataStuffPromise.then(function (data) {
        $timeout(function() {
          deffered.resolve(); <- break point 1
        }, 2000);
    }, function (error) {
        deffered.reject();
        console.log('group error', error);
    });

    return deffered.promise; <- break point 2
};
控制器:

   $q.all([
        PeopleSvc.get(),
        GroupSvc.get()
    ]).then(function(data){
           console.log('data returns, stop spinner'); <- break point 3
        });
你能告诉我这个代码有什么问题吗?谢谢

reffered.promise=很奇怪,我不知道还能叫它什么

但您甚至不应该尝试实现。已经返回了一个承诺,所以您在这里需要做的就是链接它们:

groupService.get = function() {
    return $getMyDataStuffPromise.then(function (data) {
        return $timeout(function() {
            return undefined; // maybe data?
        }, 2000);
    });
};
这太奇怪了,我不知道还能叫它什么

但您甚至不应该尝试实现。已经返回了一个承诺,所以您在这里需要做的就是链接它们:

groupService.get = function() {
    return $getMyDataStuffPromise.then(function (data) {
        return $timeout(function() {
            return undefined; // maybe data?
        }, 2000);
    });
};

这个问题的答案是:你把deferred.promise分配给了错误的东西,所以它不起作用

groupService.get = function() {
    var deffered = $q.defer(); // deferred.promise already generated here
    /*deffered.promise = */$getMyDataStuffPromise.then(function (data) {
        $timeout(function() {
          deffered.resolve();
        }, 2000);
    }, function (error) {
        deffered.reject();
        console.log('group error', error);
    });

    return deffered.promise;
};
当您调用$q.defer时,已经生成了一个新的promise对象,您将它重新分配给$getMyDataStuffPromise,当然它会更早解析。只需删除作业即可


当然,如其他帖子所建议的,尽可能远离promise反模式。

这个问题的答案是:您将deferred.promise分配给了错误的对象,因此它不起作用

groupService.get = function() {
    var deffered = $q.defer(); // deferred.promise already generated here
    /*deffered.promise = */$getMyDataStuffPromise.then(function (data) {
        $timeout(function() {
          deffered.resolve();
        }, 2000);
    }, function (error) {
        deffered.reject();
        console.log('group error', error);
    });

    return deffered.promise;
};
当您调用$q.defer时,已经生成了一个新的promise对象,您将它重新分配给$getMyDataStuffPromise,当然它会更早解析。只需删除作业即可


当然,如其他帖子所建议的,尽可能远离promise反模式。

谢谢!。这就是为什么承诺来得太早的原因。谢谢!。这就解释了为什么承诺来得太早。