如何使用承诺在此 setTimeout 中正确使用拒绝?

How do I use reject properly in this setTimeout using promises?

AsyncTimeout 只是将 setTimeout 包装在一个 promise 中,以便它可以在 promise 链中使用。但是我没有看到实施 reject()

的好地方
function asyncTimeout(time, callback) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const results = callback();
      resolve(results);
    }, time );
  });
}

asyncTimeout(1000, (test) => {
  console.log('resloved');
}).then(()=>{
  console.log('now what')
});

您可以将 callback() 调用包装在 try/catch 块中,并在出现异常时调用 reject(err)

function asyncTimeout(time, callback) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      try {
        const results = callback();
        resolve(results);
      } catch(err) {
        reject(err);
      }
    }, time );
  });
}

然而,正确的解决方案是根本不向 asyncTimeout 传递回调 - 只需使用返回的承诺及其 then 方法!承诺总会兑现的,不用reject:

function asyncTimeout(time, callback) {
  return new Promise(resolve => {
    setTimeout(resolve, time);
  });
}

asyncTimeout(1000).then(() => {
  console.log('resolved');
  throw new Error('oops');
  console.log('now what');
}).catch(err => {
  console.error('handled', err);
});