JS / TS - возвращение обещанных разрешенных / отклоненных значений внутри функций asyn c - PullRequest
0 голосов
/ 16 января 2020

Я использую определение функции в моем коде, которое является асин c функцией, и оно возвращает значения из Promise с try / catch. Как то так: -

async someFunction(parameters) {
  return new Promise(async(resolve, reject) => {
    try {

      // do something like an api call with await and resolve the response
      resolve(parameters);

    } catch (error) {
      reject(error);
    }
  });
}

someFunction("HEllo world");

Я хотел спросить, это перебор? я пишу избыточный код? это анти-паттерн?

1 Ответ

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

Я хотел спросить, это перебор? я пишу избыточный код? Это анти-паттерн?

Да, это излишне, и это как минимум два, может быть, три анти-паттерна.

Вам не нужно объявлять функцию async, от которой вы только что возвращаете созданное вручную обещание. И вам также не нужно объявлять обратный вызов исполнителя обещания как async. И, если вы используете await внутри исполнителя, вам не нужно оборачивать его созданным вручную обещанием.

Если вы действительно планируете использовать await внутри исполнителя обещания , тогда у вас уже должны быть функции, которые возвращают обещания, с которыми вы хотите использовать await. Если это так, то нет смысла заключать их в обещание, созданное вручную. Это обещание против паттерна.

Вам также не нужно пытаться / ловить, а затем просто отклонить с той же ошибкой. Вы можете просто позволить ошибке распространяться самостоятельно.

Итак, давайте предположим, что у вас есть две функции, возвращающие обещание, которые вы хотите запускать последовательно, используя await. Затем все, что вам нужно, это:

async function someFunction(parameters) {

    let v1 = await func1(...);
    // do something with v1
    let v2 = await func2(someValFromV1);
    // do something with v2
    return someValFromV2;
}

someFunction("HEllo world").then(result => {
    console.log(result);
}).catch(err => {
    console.log(err);
});

Или вы можете позвонить с помощью await вместо .then():

async function anotherFunction() {
    let result = await someFunction(...);
    // do something with result
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...