Node.js 非同步特性導致 delBookType 回呼尚未完成,findBookType 就已執行,回傳舊資料。需在刪除回呼內再查詢,或用 Promise/async-await 串聯。
bookTypeDao.delBookType(delData, function() {});
bookTypeDao.findBookType(...); // 立即執行,未等待刪除完成
res.send({bookTypeList: bookTypeList}); // bookTypeList 為空
bookTypeDao.delBookType(delData, function() {
bookTypeDao.findBookType({}, {}, {}, function(docs) {
res.send({success: '操作成功', bookTypeList: docs});
});
});
const del = () => new Promise((resolve, reject) =>
bookTypeDao.delBookType(delData, err => err ? reject(err) : resolve()));
const find = () => new Promise((resolve, reject) =>
bookTypeDao.findBookType({}, {}, {}, (err, docs) => err ? reject(err) : resolve(docs)));
app.get('/delBookType', async (req, res) => {
try {
await del();
const list = await find();
res.send({success: '操作成功', bookTypeList: list});
} catch (e) { res.status(500).send({error: e.message}); }
});
掌握非同步流程控制是 Node.js 開發核心技能。