3 回答
TA贡献1995条经验 获得超2个赞
我想你不想在这里连锁。以同步方式,您可能已经写过
function getMode(){
if (checkIf('A')) {
return 'A';
} else {
if (checkIf('B')) {
return 'B';
} else {
if (checkIf('C')) {
return 'C';
} else {
throw new Error();
}
}
}
}
这就是应如何将其转化为承诺:
function getMode(){
checkIf('A').then(function(bool) {
if (bool)
return 'A';
return checkIf('B').then(function(bool) {
if (bool)
return 'B';
return checkIf('C').then(function(bool) {
if (bool)
return 'C';
throw new Error();
});
});
});
}
if else诺言没有变平。
TA贡献1876条经验 获得超6个赞
除了显式抛出错误之外,还有其他方法吗?
您可能需要扔东西,但这不一定是错误。
大多数promise实现都有catch接受第一个参数作为错误类型的方法(但不是全部,不是ES6 Promise),在这种情况下会很有帮助:
function BreakSignal() { }
getPromise()
.then(function () {
throw new BreakSignal();
})
.then(function () {
// Something to skip.
})
.catch(BreakSignal, function () { })
.then(function () {
// Continue with other works.
});
我增加了在我自己的Promise库的最近实现中中断的功能。如果使用的是ThenFail(可能不会),则可以编写如下代码:
getPromise()
.then(function () {
Promise.break;
})
.then(function () {
// Something to skip.
})
.enclose()
.then(function () {
// Continue with other works.
});
添加回答
举报