前提・実現したいこと
スプレッドシートにSQLから取得したデータをもとに加工して貼り付ける処理を作っていました
コードの中のconsole.log(JSON.stringify(setSagyo));の部分でログが出ないところと、出るところがあり、全部出る想定でした
同期処理に問題があるのかと思いいろいろと試してみましたが、ログ出力結果は「{}」と、一か所だけ正常にログが出る状態でした
setSagyoの中身をその下の処理でも使いたいのですが、どうすればよいでしょうか?
該当のソースコード
node.js
1const spread = require("./spread_common"); 2const SPREAD_PAGETATE_ID = "スプレッドシートのID"; 3 4const oAuth2Client = spread.oAuth2Client; //権限 5const sheets = spread.sheets; //シート 6const drive = spread.drive; //ドライブ 7const permissionId = spread.permissionId; //パーミッションID 8 9/** 10 * 帳票出力 11 * @param {*} model モデル 12 * @param {*} req リクエスト 13 * @param {*} res レスポンス 14 */ 15exports.outputPageTate = async function (model, req, res) { 16 const sequelize = model.sequelize; 17 18 // 対象のスプレッドシートをコピーを作成 19 let param_copy = { 20 supportsAllDrives: true, 21 fileId: SPREAD_PAGETATE_ID 22 } 23 const copy = await drive.files.copy(param_copy); 24 25 // 出力用パラメータ 26 const output = { 27 spreadsheetId: copy.data.id, 28 valueInputOption: "USER_ENTERED", 29 auth: oAuth2Client, 30 resource: { 31 data: [ 32 ] 33 } 34 }; 35 36 var sql = ` 37★SQLその1★ 38 `; 39 40 var sql_page = ` 41★SQLその2★ 42 `; 43 44 sequelize.query(sql, { replacements: req.body.params }).spread(async (records, metadata) => { 45 sequelize.query(sql_page, { replacements: req.body.params }).spread(async (records_page, metadata) => { 46 var ClientKey = req.body.params.ClientKey; 47 var LotCode = req.body.params.LotCode; 48 var flg = req.body.params.flg; 49 var record = records[0]; 50 var title = (flg == 'Honsatu') ? record['Title'] : '小冊 ' + record['Title']; 51 var pagesu = Math.floor((records_page.length - 31) / 60) + 1; 52 53 // 文集合本形式、当社作業、納品手配 54 var setSagyo = await setPageTateTyouhyou_Sagyo(sequelize, req, model); 55 56 // 部品一覧、トビラ 57 var setBuhin = setPageTateTyouhyou_Parts(sequelize, req, model); 58 59 // 表裏見返し 60 var setMikaesi = setPageTateTyouhyou_Mikaesi(sequelize, req); 61 62 // 備考 63 var setMemo = setPageTateTyouhyou_Memo(record); 64 65 // 頁リスト 66 var setPage = setPageTateTyouhyou_Page(sequelize, req); 67 68 console.log(JSON.stringify(setSagyo)); //ここではsetsagyoの中身が出ません 69 }); 70 }); 71} 72 73 74/** 75 * 文集合本形式、当社作業、納品手配 76 * @param {*} req 77 * @param {*} model 78 */ 79async function setPageTateTyouhyou_Sagyo(sequelize, req, model) { 80 var setSagyo = {}; 81 var sql = ` 82★SQL★ 83 `; 84 85 sequelize.query(sql, { replacements: req.body.params }).spread(async (records, metadata) => { 86 var records_code = await model.M_CodeMaster.findAll({ where: { CodeNo: 16 } }); 87 88 89 var record = records[0]; 90 91 setSagyo['BunsyuKeisiki'] = record.BuhinSonzaiBasyo; 92 setSagyo['NouhinTehai'] = record.CodeTi; 93 setSagyo['TousyaSagyou1'] = null; 94 setSagyo['TousyaSagyou2'] = null; 95 setSagyo['TousyaSagyou3'] = null; 96 setSagyo['TousyaSagyou4'] = null; 97 for (i = 0; i < records_code.length; i++) { 98 if (record.TousyaSagyou != null) { 99 if (record.TousyaSagyou.match(/1/) && records_code[i].CodeID == 1) { 100 setSagyo['TousyaSagyou1'] = records_code[i].CodeTi; 101 } else if (record.TousyaSagyou.match(/2/) && records_code[i].CodeID == 2) { 102 setSagyo['TousyaSagyou2'] = records_code[i].CodeTi; 103 } else if (record.TousyaSagyou.match(/3/) && records_code[i].CodeID == 3) { 104 setSagyo['TousyaSagyou3'] = records_code[i].CodeTi; 105 } else if (record.TousyaSagyou.match(/4/) && records_code[i].CodeID == 4) { 106 setSagyo['TousyaSagyou4'] = records_code[i].CodeTi; 107 } 108 } 109 } 110 111 112 console.log(JSON.stringify(setSagyo)); //ここではsetsagyoの中身が出ます 113 return Promise.resolve(setSagyo); 114 }); 115 116console.log(JSON.stringify(setSagyo)); //ここではsetsagyoの中身が出ません 117 return setSagyo; 118} 119 120/** 121 * 部品一覧、トビラ 122 * @param {*} req 123 * @param {*} model 124 */ 125async function setPageTateTyouhyou_Parts(sequelize, req, model) { 126略 127} 128 129/** 130 * 表裏見返し 131 * @param {*} req 132 */ 133async function setPageTateTyouhyou_Mikaesi(sequelize, req) { 134略 135} 136 137/** 138 * 備考 139 * @param {*} record 140 */ 141async function setPageTateTyouhyou_Memo(record) { 142略 143} 144 145/** 146 * 頁リスト1ページ目 147 * @param {*} req 148 */ 149async function setPageTateTyouhyou_Page(sequelize, req) { 150略 151}
試したこと
async/await,promiseなどの同期処理に問題があると考えていろいろ試したが駄目でした。。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。