如何使用承诺在此 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);
});
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);
});