awaitの挙動が理解できないのですが、なぜ下記のようなことが発生するのでしょうか?
router.post("/", async (req, res, next) => { const token = req.headers.token; const payload = req.body.payload; const decoded = await CheckIdToken(token).catch(console.log); const uid = decoded.uid; //ここから CreateWork(uid, payload, next); console.log("LITSTENEND CREATEWORK"); return res.json({ status: 200, }); }); async function CreateWork(uid, data, next) { console.log("================ SEARCH ================="); const client = await pool.connect(); var user = await client .query("SELECT * FROM USERS WHERE uid = $1", [uid]) .catch(next); const id = user.rows[0].id; //こいつが後から出でくる。 console.log("================ continue ================="); var sql = "INSERT INTO WORKS (user_id, title, detail, github, deploy, thumbnail) values ($1, $2, $3, $4, $5, $6)"; const values = [ id, data.title, data.detail, data.giturl, data.workurl, data.thumbnail, ]; let result = await client.query(sql, values); sql = createSql(data.tags, result.rowCount); client.query(sql); console.log("END CREATEWORK"); } コンソール // ================ SEARCH ================= [1] LITSTENEND CREATEWORK [1] ================ continue ================= [1] END CREATEWORK
ここで疑問なのがなぜawaitで非同期関数を同期的に振る舞っているのにもかかわらず、こののようなことが発生するのでしょか?
一応、下記のようにすると同期的にはなります。
await CreateWork(uid, payload, next);
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/29 10:06