サブプロセスで配列を処理する関数があります。javascript関数からの戻り配列が機能しません
実際の配列を関数に送り、更新された配列を返すことです(2つの値が削除されます)。
私がして、関数を呼び出しています:呼び出された関数がありません
var resultMaster = [];
resultMaster = traceSystem(traceURL,searchURL,term,master_id,groupID,final_pair,masters);
console.log('resultMaster: ' + resultMaster);
console.log('resultSystem under Master: ' + masters);
:
function traceSystem(traceURL,searchURL,term,master_id,groupID,pairKey,masters) {
var resultSystem = [];
...
$.ajax({
url: searchURL,
type:'post',
data: jsonQuery,
dataType: 'text',
crossDomain: true,
async: false,
success: function(response) {
...
for (m = 0; m < system.masters_ids.buckets.length; m++) {
console.log('Removing masterID: ' + system.masters_ids.buckets[m].key);
masters = masters.filter(function(e) { return e != system.masters_ids.buckets[m].key });
console.log('resultSystem: ' + masters);
};
} // Success
}); //Ajax
console.log('final result from System: ' + masters);
return masters;
};
私はreturn masters;
が変数resultMasterに親関数に配列を返すことを想定。しかし、それはしません。
コンソールからログインを参照してください:ループから
Array [ "[email protected]…", "[email protected]…", "3b3_87465652", "00000553239291", "[email protected]…", "[email protected]…" ]
ログ:右ループの後
Removing masterID: 3b3_87465652
resultSystem: [email protected]_te,[email protected]_te,00000553239291,[email protected]_te,[email protected]_te
Removing masterID: [email protected]_te
resultSystem: [email protected]_te,00000553239291,[email protected]_te,[email protected]_te
ログイン:
final result from System: [email protected]_te,00000553239291,[email protected]_te,[email protected]_teindex-by-masterid.jsp:343:5
ログ親関数からtraceSystemから後の戻り値:
resultMaster:
resultSystem under Master: [email protected]_te,[email protected]_te,3b3_87465652,00000553239291,[email protected]_te,[email protected]_te
変数resultMastersが空であるようです。
呼び出された関数から配列を正しく返すにはどうすればいいですか?
@Quentin要求に基づいて追加:私は行動と奇妙をシミュレートするために別の簡単な例を作成しようとしました
は作業があることがある:
<script type="text/javascript">
function traceMasterId(masters) {
var resultMaster = [],
masters = [];
masters.push('[email protected]_te');
masters.push('[email protected]_te');
masters.push('[email protected]_te');
masters.push('[email protected]_te');
masters.push('3b3_87465652');
masters.push('00000553239291');
console.log('Masters: ' + masters);
resultMaster = traceSystem(masters);
console.log('resultMaster: ' + resultMaster);
};
function traceSystem(masters) {
var master_ids = [];
master_ids.push('[email protected]_te');
master_ids.push('3b3_87465652');
for (m = 0; m < master_ids.length; m++) {
console.log('Removing masterID: ' + master_ids[m]);
masters = masters.filter(function(e) { return e != master_ids[m] });
console.log('resultSystem: ' + masters);
};
console.log('Final result from System: ' + masters);
return masters;
};
</script>
<body onload="traceMasterId();"></body>
ログを参照してください:
Masters: [email protected]_te,[email protected]_te,[email protected]_te,[email protected]_te,3b3_87465652,00000553239291test.jsp:14:5
Removing masterID: [email protected]_tetest.jsp:29:6
resultSystem: [email protected]_te,[email protected]_te,[email protected]_te,3b3_87465652,00000553239291test.jsp:31:6
Removing masterID: 3b3_87465652test.jsp:29:6
resultSystem: [email protected]_te,[email protected]_te,[email protected]_te,00000553239291test.jsp:31:6
Final result from System: [email protected]_te,[email protected]_te,[email protected]_te,00000553239291test.jsp:34:5
resultMaster: [email protected]_te,[email protected]_te,[email protected]_te,00000553239291test.jsp:18:5
私は他の方法で何が行われたのか違いはありません。サブ関数が1つのパラメータでのみ呼び出されたことを除けば、
コードは '非同期言う:偽、' - それはにISN非同期呼び出し。 – Quentin
これは意味をなさない。あなたは値を記録します。その値を返します。戻り値を記録します。そして彼らは異なっています。私は下で起こるどんな状況も考えることができません。あなたはあなたの[mcve]をもっと* minimal *と* complete *にすることができますか? – Quentin
'async:false'が[仕様で廃止されました](https://xhr.spec.whatwg.org/#sync-warning)であることに注意してください。ブラウザはいつでもエラーをスローすることができますあなたのコード。 –