Escape несколько вложенных функций в NodeJS - PullRequest
1 голос
/ 12 января 2020

У меня есть код в Javascript, который выглядит следующим образом:

function someFunction() {
    // Code
    somePromise().catch(err => {
        console.log(err);
    });
    // Mode Code
}

Я хотел бы экранировать somePromise().catch и someFunction() в случае отклонения somePromise(). Я пытался использовать return, но это только позволяет мне сбежать somePromise().catch. Есть ли какая-нибудь функция, которая позволила бы мне вырваться из вложенных циклов?

Ответы [ 2 ]

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

Вы можете сделать это, используя async / await:

function async someFunction() {
    // Code
    try {
        await somePromise();
    } catch (err) {
        console.log(err);
        return; // aborts further execution
    }
    // More Code
}

Подробнее см. asyn c функция .

0 голосов
/ 12 января 2020

Async / await решает проблему, но важно понять, почему она решает проблему.

Обещания - это механизм хранения продолжений. Функции, которые вы передаете then и catch, хранятся в обещании и выполняются при его разрешении.

Чтобы решить эту проблему без async / await, вам нужно просто вернуть обещание и используйте then для выполнения любого кода, который должен выполняться, когда Обещание не отклоняет:

function someFunction() {
    // Code
    return somePromise()
      .then(result => {
        // More Code
      })
      .catch(err => {
        console.log(err);
      });
}

Это, по сути, то, к чему async / await удаляет сахар. Async / await - это синтакт c сахар вокруг конечного автомата, который связывает эти продолжения для вас.

...