首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Node.js + MongoDB 非同步刪除後重新查詢列表正確寫法

     編輯:程式設計疑難解答

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});
    });
});

進階:Promise 化

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 開發核心技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved