这是一个“为什么”问题,而不是建议。我知道以下函数是不正确的,但有助于阐明我的问题:我想知道此视图有什么问题(即我在这里缺少Promise的要求)。答案可以帮助像我这样的人摆脱困惑。请提供一个示例,其中必须满足Promise
的以下要求:
I(错误地)假定了Promise用于推迟执行功能并分配then&catch链。我需要了解以下内容:为什么JavaScript Promise使用(解析,拒绝)而不是返回或引发的无参数回调?
在幼稚和不正确的视图中,可以像下面这样以更简单的方式使用Promise
(没有两个参数resolve
,reject
):
/*new*/ IncorrectPromise(()=>{
let x = Math.random()>0.5;
console.log('promise 1');
if (x) {
return 'head1';
} else {
throw new Error('tail1');
}
})
.then((d)=>{
console.log('.then() d=', d);
})
.catch( (ex) =>{
console.log('.catch() e=', ex.message);
});
代替承诺的方式:
new Promise( (resolve_, reject_) => {
let y = Math.random()>0.5;
console.log('promise 2');
if (y) {
resolve_('head2');
} else {
reject_(new Error('tail2'));
}
})
.then((d)=>{
console.log(' .then() d=', d);
})
.catch( (ex) =>{
console.log(' .catch() e=', ex.message);
});
即当控制流退出promise回调的主体时,根据退出是由return
还是throw
引起的,使用resolve或拒绝。
我的问题是,为什么Promise使用当前语法?答案将是使用此(自然)功能无法完成的示例。
可以通过以下定义轻松地模拟上述语法(为简单起见,请忽略IncorrectPromise
不是构造函数,因此不需要new
运算符的事实):
function IncorrectPromise(callback) {
return new Promise( (res, rej) => {
try {
res( callback() );
} catch (err) {
rej(err);
}
});
}
这种简单的用法语法的缺点是什么?设计者或Promise
使用(解析,拒绝)的意图是什么?