node.js将我的快递方法转换为异步/等待



我是否有疑问将我的快递方法转换为使用异步/等待。

此刻,我的方法看起来像:

app.post('/', (req, res) => {
const body = req.body;
let hospital = new Hospital({
    name: body.name,
    user: req.user._id
});
hospital.save((err, hospitalCreated) => {
    if (err) {
        return res.status(400).json({
            ok: false,
            mensagem: "Error to create hospital",
            errors: err
        });
    }
    res.status(201).json({
        ok: true,
        hospital: hospitalCreated
    });
});

}(;

作为我使用节点的新来,我尝试这样说:

app.post('/', async (req, res) => {
const body = req.body;
let hospital = new Hospital({
    name: body.name,
    user: req.user._id
});
await hospital.save((err, hospitalCreated) => {
    if (err) {
        return res.status(400).json({
            ok: false,
            mensagem: "Error to create hospital",
            errors: err
        });
    }
    res.status(201).json({
        ok: true,
        hospital: hospitalCreated
    });
});

这是实现这一目标的正确方法?我必须使用尝试/捕获吗?最好的方法是什么?

谢谢

asyncawait Generator的目的是避免使用回调。如果save方法始终返回Promise并调用回调,您所做的可能会起作用,但是此方法破坏了生成器的全部目的。您应该删除回调,然后使用trycatch

try {
    await hospital.save();
    res.status(201).json({
        ok: true,
        hospital: hospital
    });
} catch (err) {
    res.status(400).json({
        ok: false,
        mensagem: "Error to create hospital",
        errors: err
    });
}

我认为您可以将hospital.save移至带有Promise Resolve的异步函数,然后使用等待响应并从承诺中获取错误,例如:

通过使用Mongoose回调更新:

function saveHospital(hospital) {
        return new Promise((resolve, reject) => {
            hospital.save((err, hospitalCreated) => {
                if (err) {
                    reject(error);
                }
                resolve(hospitalCreated);
            });
        });
    }
    app.post('/', async (req, res) => {
        const body = req.body;
        let hospital = new Hospital({
            name: body.name,
            user: req.user._id
        });
        try {
            const hospitalCreated = await saveHospital(hospital)
            res.status(201).json({
                ok: true,
                hospital: hospitalCreated
            });
        } catch(error) {
            res.status(400).json({
                ok: false,
                mensagem: "Error to create hospital",
                errors: err
            })
        }
    }

最新更新