Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我得到Heroku H12请求超时错误,没有明显的原因_Javascript_Node.js_Heroku_Parse Server_Parse Cloud Code - Fatal编程技术网

Javascript 我得到Heroku H12请求超时错误,没有明显的原因

Javascript 我得到Heroku H12请求超时错误,没有明显的原因,javascript,node.js,heroku,parse-server,parse-cloud-code,Javascript,Node.js,Heroku,Parse Server,Parse Cloud Code,在我的解析服务器中,我有一个名为Stats的类,它包含timeScore(数字)列 我正在使用云代码更新列timeScore中的所有250k行 我的代码工作得很好,除了我没有明显的原因而出现以下H12请求超时错误 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/parse/functions/timeScore 无论我选择什么batchSize,我都会收到超时错误,并且每30秒收到一次。我一

在我的解析服务器中,我有一个名为
Stats
的类,它包含
timeScore
(数字)列

我正在使用云代码更新列
timeScore
中的所有250k行

我的代码工作得很好,除了我没有明显的原因而出现以下H12请求超时错误

heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/parse/functions/timeScore
无论我选择什么batchSize,我都会收到超时错误,并且每30秒收到一次。我一共买了5次。第五次之后,我再也看不到它了,这个过程继续进行,没有任何问题或错误。我在过程中大约2.5分钟(30秒*5)出现第五个也是最后一个错误。整个过程大约需要14分钟。这些超时错误不会以任何方式影响进程。所有250k对象都将更新和保存,而与所选的batchSize无关,也与超时错误无关

我想可能是因为我从未调用过
results.error
results.success
服务器认为我仍在做一些工作,并显示了错误。然而,我更新了我的代码,如下所示,以包括它们,我仍然得到超时错误

问题是在每次超时错误
processBatch()
再次从服务器调用后。因为我有5个超时错误
processBatch()
被调用了5次。因此,在第5次超时错误之后,有5个
processBatch()
函数同时运行(我通过日志确认了这一点)。这使得这一过程所需的时间比它应该需要的时间要长得多

我没有执行任何长时间运行的操作。我只是在我的解析服务器上更新和保存数据

这是我的密码:

var _ = require("underscore");
Parse.Cloud.define("timeScore", function(request, response) {
var counter = 0;
function processBatch(query, batchSize, startingAt, process) {
    query.limit(batchSize);
    query.skip(startingAt);

    return query.find().then(results => {

        return process(results).then(() => results.length);
    }).then(length => {

        return (length === batchSize)? processBatch(query, batchSize, startingAt+length, process) : {};
    });
}

function setTimeScores(stats) {
        console.log("LENGTH " + stats.length);
    _.each(stats, stat => {

        counter ++;
        stat.set("timeScore", counter);

    });
    return Parse.Object.saveAll(stats);
}

var query = new Parse.Query("Stats");

processBatch(query, 1000, 0, setTimeScores).then(results => {
        response.success(results);
    }).catch(error => {
        response.error(error);
    });

});
我这样称呼它

#!/usr/bin/env node
var Parse = require("parse/node");
Parse.initialize("xx",   "xx");
Parse.serverURL = "http://randomapp.herokuapp.com/parse";
Parse.Cloud.run('timeScore');

是什么导致我收到的heroku超时错误?我怎么修理它

对“processBatch”中的递归感到好奇。您可以调查使用“工人”绕过H12..”“增量”也可能有用,在这种情况下为原子运算。在一个没有H12限制的worker中,只需处理整个集合一次,没有递归,没有分段。如果适用,请使用“递增”运算。@Robert Rowntree我试着完全按照你说的去做。我编写的第一个代码一次处理了整个250k对象,但我不知道如何使代码在worker dyno上运行,而不是在web dyno上运行,因为在web dyno上我得到了H12错误。不久前我发布了一个关于它的问题。你能不能看看,告诉我我做错了什么@Robert Rowntree你能详细说明什么是“增量原子操作”吗?