NodeJS Express Multi Asyn c по завершению - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь написать лучшую JS инструкцию, чем множество вложенных .then ().

У меня есть конечная точка, которая имеет множество настраиваемых параметров на основе импортированного файла конфигурации.

например: написать в БД, выполнить языковой перевод, выполнить задание XYZ.

Прямо сейчас, он настроен как множество вложенных событий, например:

do TaskA -> then-> do TaskB -> then-> do TaskN

Я пытаюсь перейти к модели, которая больше похожа на

Do TaskA
and
Do TaskB
and 
Do TaskN

Однажды все задачи были выполнены, а затем вернуть ответ обратно пользователю.

В моей голове JS выглядит так:

// Example Multi Async Job
app.post('/command/:commandType', (request, response) => {
    var responseJSON = {};
    responseJSON.status = 500;
    responseJSON.success = false;
    responseJSON.message = "I failed to do all the things.";

    // If needed do language translation
    if(config.languageTranslation == true){
        async do the language translation 
    }

    // If needed write to DB
    if(config.storeDB == true){
        async write to the DB
    }

    // If needed do XYZ task
    if(config.xyz == true){
        async do the thing
    }

    // On success of all the tasks, update the responseJSON
    responseJSON.status = 200;
    responseJSON.success = true;
    responseJSON.message = "I did all the things";

    // If any of the jobs fail, then the fallback is the 500 and success==false from the beginning
    response.status(responseJSON.status).json(responseJSON);

});

Я делаю это с большим количеством обещаний или есть другой способ добиться этого? Спасибо

1 Ответ

1 голос
/ 13 января 2020

Итак, вы можете использовать async / await, если вы пытаетесь избежать много обещаний .then,

Что-то вроде ниже,


// Example Multi Async Job
app.post('/command/:commandType', async (request, response) => {
    var responseJSON = {};
    responseJSON.status = 500;
    responseJSON.success = false;
    responseJSON.message = "I failed to do all the things.";

    // If needed do language translation
    if(config.languageTranslation == true){
        // If the below method returns a promise then await 
        // else call without await
        await languageTranslation()
    }

    // If needed write to DB
    if(config.storeDB == true){
        // call you db native or ORM module insert or update( depending on your situation )
        await db.insert(req.body)
    }

    // If needed do XYZ task
    if(config.xyz == true){
        // If the below method returns a promise then await 
        // else call without await
        await xyzTask()
    }

    // On success of all the tasks, update the responseJSON
    responseJSON.status = 200;
    responseJSON.success = true;
    responseJSON.message = "I did all the things";

    // If any of the jobs fail, then the fallback is the 500 and success==false from the beginning
    response.status(responseJSON.status).json(responseJSON);

});



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...