Javascript如何更好地编写嵌套回调的方法?

yoz*_*ama 4 javascript node.js

我有3层回调,如下所示:

    app.post('/', (req, res) => {
        var filename = `outputs/${Date.now()}_output.json`;
        let trainInput = req.files.trainInput;
        let trainOutput = req.files.trainInput;
        let testInput = req.files.trainInput;

        //first
        trainInput.mv(`inputs/${req.body.caseName}/train_input.csv`, function (err) {
            if (err) return res.status(500).send(err);
            //second
            trainOutput.mv(`inputs/${req.body.caseName}/train_output.csv`, function (err) {
                if (err) return res.status(500).send(err);
                //third
                testInput.mv(`inputs/${req.body.caseName}/test_input.csv`, function (err) {
                    if (err) return res.status(500).send(err);

                    res.send('success');
                });
            });
        });   
    });
Run Code Online (Sandbox Code Playgroud)

在这种情况下,只有3个文件上传.在另一种情况下,我有超过10个文件上传,它进行10层回调.我知道因为JavaScript异步.

在这种情况下,有没有办法制作漂亮的代码?这是因为当它进行10层回调时,代码看起来水平怪异.

谢谢

And*_*yan 6

您可以使用以下代码使代码看起来更好,并避免回调地狱

app.post('/', async (req, res) => {
    var filename = `outputs/${Date.now()}_output.json`;
    let trainInput = req.files.trainInput;
    let trainOutput = req.files.trainInput;
    let testInput = req.files.trainInput;
    try {
        var result1 = await trainInput.mv(`inputs/${req.body.caseName}/train_input.csv`);
        var result2 = await trainInput.mv(`inputs/${req.body.caseName}/train_output.csv`);
        var result2 = await testInput.mv(`inputs/${req.body.caseName}/test_input.csv`);
        res.send('success');
    }
    catch (error) {
        res.status(500).send(error);
    }
});
Run Code Online (Sandbox Code Playgroud)