1 回答

TA贡献1848条经验 获得超10个赞
您可以将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);
});
添加回答
举报