通过传递 parms 进入 JavaScript 循环的计时

Timing into javascript loop with passing parms

本文关键字:循环 JavaScript 进入 parms      更新时间:2023-09-26

谁能给我一个建议如何计时这个函数:我正在尝试执行:

GameBaccarat.prototype.playHands = function(requests) {
    for (var i = 0; i < 3; i++) {
        if (game.instance.players[i]) {
            var hand = i;
            game.instance.hand = i;
            this.activeHands += 1;
            var request = requests[i];
            connector.sendRequest(request, function() {
                var xhr = this;
                game.instance.handleDealResult(hand, xhr)
            });
        }
    }
}

喜欢:

setTimeout(function(){connector.sendRequest(request, function() {var xhr = this; game.instance.handleDealResult(hand, xhr) });}, i*200);

但到目前为止还没有成功。.请帮忙:)

附言我尝试通过,var that = this,并将其添加到超时,dosent 工作:(

试:

                var that = this;
                setTimeout(function(){
                connector.sendRequest(request, function() {
                var xhr = that; 
                game.instance.handleDealResult(hand, xhr) });
                }, i*200, that);

不起作用,只是崩溃了回调:(

如果您只想对多个请求进行排序,则可以像这样操作,即仅在前一个请求完成时才开始下一个请求,并保留一个计数器来记录您已完成的请求数:

GameBaccarat.prototype.playHands = function(requests) {
    var requestCntr = 0, numRequests = 3;
    var xhr = this;
    function next() {
        if (requestCntr < numRequests && game.instance.players[requestCntr]) {
            game.instance.hand = requestCntr;
            xhr.activeHands += 1;
            connector.sendRequest(requests[requestCntr], function() {
                game.instance.handleDealResult(requestCntr, xhr);
                ++requestCntr;
                next();
            }
        }
    }
    next();
}

如果要对请求之间排序并添加延迟,则可以为启动下一个请求添加setTimeout()延迟:

GameBaccarat.prototype.playHands = function(requests) {
    var requestCntr = 0, numRequests = 3;
    var xhr = this;
    function next() {
        if (requestCntr < numRequests && game.instance.players[requestCntr]) {
            game.instance.hand = requestCntr;
            xhr.activeHands += 1;
            connector.sendRequest(requests[requestCntr], function() {
                game.instance.handleDealResult(requestCntr, xhr);
                ++requestCntr;
                // 1 second delay before next requeset
                setTimeout(next, 1000);    
            }
        }
    }
    next();
}