Javascript初学者です。非同期処理を勉強中ですが難しいです。。。
以下のコードを作成したものの、
for (const control of controls) にあるif文が、await client.record.updateRecord が完了する前に
for (const control of controls)のループで先に実行されてしまいます。
if文を外すと、順番に動きます。
恐れ入りますが、何が間違っているのか、修正点をご教示いただけないでしょうか。
なお、controlsは、下記のように各要素をオブジェクトとした配列です。
const controls = [
{ makeDocFCD: “種類1”, setFCD: [“添付書類1”, “添付書類1_別紙”], filesIndex: [0, 1] },
{ makeDocFCD: “種類2”, setFCD: [“添付書類3”, “添付書類3_別紙”], filesIndex: [2, 3] },
];
作成したコード
async function registerFilesToRecord(record, files) {
const client = new KintoneRestAPIClient();
// ファイル添付方法(controls)すべてに対して
// makeDocFCD=PDFファイル種別、setFCD=添付ファイルフィールドコード、
// filesIndex=添付するファイルが格納されているfilesの要素番号
for (const control of controls) {
const {makeDocFCD, setFCD, filesIndex} = control;
// 指定フィールドが'作成'になっていたら、PDFをレコードに登録する
if (record[makeDocFCD].value === "作成") {
// 添付フィールドそれぞれに対し順番に処理を実行
for (let i = 0; i < setFCD.length; i++) {
const file = files[filesIndex[i]];
if (file) { // 該当するファイルがあるならば
try {
await client.record.updateRecord({
app: kintone.app.getId(),
id: kintone.app.record.getId(),
record: {
[setFCD[i]]: { value: [file] } // そのフィールドに該当するファイルを登録する
}
});
} catch(error) {
console.error(`Error updating record : ${error}`);
}
}
}
}
}
}