Как правильно разрешить обещание в конструкторе обещаний - PullRequest
0 голосов
/ 26 февраля 2020
const setTimeoutProm = (delay) => new Promise(res => setTimeout(() => res(delay),delay))

Я хочу сделать что-то вроде

const asyncOpr = (delay) => { 
  return new Promise((resolve, reject) => { 
    //update delay for some reason.
    const updatedDelay = delay * 2;
    setTimeoutProm(updatedDelay).then(res => {
      resolve(res);
    }).catch(err => {})
  })
}
asyncOpr(2000).then(() => alert("resolved")) //this works

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

1 Ответ

1 голос
/ 26 февраля 2020

Нет, на самом деле, как вы делаете, это антипаттерн .

Вы можете просто вернуть обещание из функции:

 const asyncOpr = (delay) => { 
  return setTimeoutProm(delay);
 };

При необходимости, Обещание также может быть возвращено изнутри .then:

 doA()
   .then(() => setTineoutProm(1000))
   .then(() => doB());

Или же его можно ожидать внутри функции asyn c:

  async function asyncOpr(delay) {
    //...
    await setTimeoutProm(delay);
    //...
 }
...