私はsame question as earlierを持っていますが、私のコードへの回答に問題があります。私のエラーはRangeError: Maximum call stack size exceeded
です。Node.js最大呼び出しスタックを超えました
私のコードの非常に簡略化擬似バージョンはこれです:
function make_request(url, other_params){
request(url, function(response){
if(something) var some_var = 'some value';
else var some_var = '';
//do something with response to generate, some_var, and insert into DB
var my_arr = [some_var];
connection.query('INSERT my_table SET name = ?', my_arr, function(err, rows, fields) {
if(my_arr==''){
// generate new url to make new request
make_request(url, other_params);
}
});
});
}
connection.query('SELECT * from my_table', function(err, rows, fields){
var len =rows.length;
for(var i = 0; i < len; i++){
var url = rows[i].url;
make_request(url, other_params);
}
});
私はいくつかの他のハッキングの中setImmediate
またはsetTimeout
で内部make_request
をラップ試してみたが、何もコールスタックエラーを防ぐように思いません。私はこの作業をするライブラリを追加することができます。いかなる考えも認められるだろう。
実際に何が起こっているかを見るには、ここに擬似コードが多すぎます。 REALコードを見る必要があります。あなたの質問にはコードがあるので、 'if(my_arr == '')'は決して真ではないので、ほとんど何もしないので、コードはいくつかのDBクエリを行い、決して結果を何もしません。今のところここには何も見えません。私はこのコードはあなたのエラーを生成するとは思わない。あなたがここに示すよりも多くのことがあります。 – jfriend00
Jfriend00 my_arr == ''は時間の50%に当てはまります。それは役に立ちましたか? –
私のコードは超ロングですが、基本的にはHTTPリクエストを含む1つの関数で、しばしば内部で呼び出されます。それに対して一般化可能な解決法はないのですか? –