Tha*_*vam 3 javascript node.js es6-promise
我有以下代码
function request(status){
return new Promise((resolve, reject) => {
setTimeout(() => {
if(status){
resolve('Success');
} else {
reject('error');
}
}, 1000);
});
}
let promise = request(false);
promise.then( response => {
console.log('response' , response);
});
promise.catch( (err) => {
console.log('got Error', err);
});
Run Code Online (Sandbox Code Playgroud)
即使我发现拒绝回复,也会抛出跟随错误
得到错误错误(节点:11252)UnhandledPromiseRejectionWarning:错误(节点:11252)UnhandledPromiseRejectionWarning:未处理的承诺拒绝.这个错误源于在没有catch块的情况下抛出异步函数,或者拒绝未使用.catch()处理的promise.(拒绝ID:1)(节点:11252)[DEP0018]弃用警告:不推荐使用未处理的拒绝承诺.将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程.
但是如果我移除then
块然后它工作正常,
没有堆栈控制台上的跟踪错误
function request(status){
return new Promise((resolve, reject) => {
setTimeout(() => {
if(status){
resolve('Success');
} else {
reject('error');
}
}, 1000);
});
}
let promise = request(false);
promise.catch( (err) => {
console.log('got Error', err);
});
Run Code Online (Sandbox Code Playgroud)
输出:
得到错误错误
我不明白为什么它以这种方式运作?
这里的关键-和有关使用承诺的关键的东西-就是then
和catch
创造新的承诺.因此,被拒绝的未被处理的承诺是由以下人员创建的then
:
let promise = request(false);
promise.then( response => { // Creates new promise, rejection isn't handled
console.log('response' , response);
});
promise.catch( (err) => { // Creates new promise
console.log('got Error', err);
});
Run Code Online (Sandbox Code Playgroud)
这是您看到承诺链的原因之一:
request(false)
.then( response => {
console.log('response' , response);
})
.catch( (err) => {
console.log('got Error', err);
});
Run Code Online (Sandbox Code Playgroud)
在那里,仍然创建了三个promises(原始的request
,一个来自then
,一个来自catch
),但是最终catch
处理程序对所有三个都处理了拒绝.
由此创建then
和承诺的承诺catch
:
then
处理程序,请使用原始承诺的解决方案解决then
处理程序,请调用它:
catch
处理程序,请拒绝原始承诺的拒绝catch
处理程序,请调用它并完全按照then
上面的处理程序执行(根据返回或抛出的内容解析或拒绝) 归档时间: |
|
查看次数: |
192 次 |
最近记录: |