javascript - $q Angular 延迟

标签 javascript angularjs q angular-promise

我简化了代码来解决特定问题。

我在 $scope 有 2 个函数:singleRequest()multiReqest()multiReqest() 必须多次调用testServer(),然后调用singleRequest()

此示例中的问题:singleRequest()multiReqest() 启动之前调用,但同时 console.log('All requests from multiRequest returned ') 依次调用。 为什么会发生这种情况?我究竟做错了什么?谢谢。

function TestCtrl($scope, $q, $http) {

//variables declaration etc

var testServer = function (_pos) {
    console.log('testServer:', _pos)
    var deferred = $q.defer();
    $http.get(service.first, parameters).success(function (data, status, headers, config) {
        console.log(_pos, 'request from multiRequest loaded');
        //do smth with data
        deferred.resolve();
    }).error(function (err) {
        deferred.reject(err);
    });
    return deferred.promise;
};
//
//
$scope.singleRequest = function () {
    console.log('Start singleRequest function');
    $http.get(service.second).success(function (data, status, headers, config) {
        console.log('Single request loaded');
        //do smth with data
    });
};
//
//
$scope.multiRequest = function (_callback) {
    console.log('Start multiRequest function');
    var promises = [];
    for (var i = 1; i <= 3; i++) {
        promises.push(testServer(i));
    }
    $q.all(promises).then(function () {
        console.log('All requests from multiRequest loaded');
        _callback;
    });
};
//
$scope.multiRequest($scope.singleRequest());
}

控制台日志:

  • 启动singleRequest功能
  • 启动多请求功能
  • 测试服务器:1
  • 测试服务器:2
  • 测试服务器:3
  • 已加载单个请求。 XHR 加载完毕:GET "http://...
  • 1“已加载来自 multiRequest 的请求”。 XHR 加载完毕:GET "http://...
  • 2“已加载来自 multiRequest 的请求”。 XHR 加载完毕:GET "http://...
  • 3“已加载来自 multiRequest 的请求”。 XHR 加载完毕:GET "http://...
  • 已加载来自 multiRequest 的所有请求

最佳答案

您没有传递回调,但实际上在此处调用该函数:

$scope.multiRequest($scope.singleRequest()); // Passing return value

所以你应该将其更改为:

$scope.multiRequest($scope.singleRequest); // Passing function

然后将 _callback; 更改为 _callback();,以调用该函数。

关于javascript - $q Angular 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36056813/

相关文章:

node.js - 如何在 Node Js 中将 A-lib 与 fastify 一起使用

javascript - 复制facebook open graph,如何获取URL链接上的OG值

javascript - 如何检测文本是否溢出(text-overflow : ellipsis) in angular controller

javascript - Nodejs 和 Angular 应用程序使用 JWT 发送 401 Unauthorized 和 200 OK

angularjs - Angular 和 IE9 的愚蠢之处在于本地方法

javascript - Q.Promise 数组,如果超过 1 个则发出警报

javascript - 实例化对象后如何将变量传递给函数?

javascript - 运行不安全 JavaScript 代码的最佳解决方案

javascript - 使用helper 在handlebars.js 中创建链接

javascript - Microsoft Edge : XMLHttpRequest: Network Error 0x2efd, 由于错误 00002efd,无法完成操作