【问题标题】:Timing into javascript loop with passing parms通过传递参数进入 javascript 循环
【发布时间】:2023-03-25 03:03:01
【问题描述】:

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

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);

没用,只是回调崩溃了:(

【问题讨论】:

  • 如果你能用文字描述你的目标是什么,我相信有人可以帮助你。但是仅仅给我们代码而不告诉我们你想要完成什么是不够的,我们知道如何提供帮助。
  • 我正在尝试设置发送请求之间的间隔,现在如果我发送 3 个请求并且之后与它们一起工作,它们有时会按顺序混淆:这就是我尝试这样做的原因:每 x 秒发送一次请求,因此之间存在时间间隔,因此响应不会按请求更改顺序。
  • 因为这个参数,我现在发布答案

标签: javascript html function settimeout timing


【解决方案1】:

如果您只想对多个请求进行排序,您可以这样做,只有在前一个请求完成后才开始下一个请求,并为您已完成的数量保留一个计数器:

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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多