这里的承诺相当新,我想知道......
看了bluebird
包以处理承诺:
promise
属性我一直想知道如何使用已经创建承诺的软件包拒绝承诺提出catch
,并且我只是使用他们的{{1}链?
我的意思是,在我的创建解析器上使用.then
最终会向此函数的用户提出reject
。
如果我没有解析器,我如何提出catch
。将承诺链接如下:
catch
我看到某些软件包实现这一目标的唯一方法是返回一个function doSomthing(): Promise<someValue>
return somePackage.someMethodWithPromise().then((result)=> {
return someValueToTheNextThen;
})
}
对象,以便下一个{ errors, result }
可以检查是否有任何错误并对其做出反应,但我想要提出then
并且不检查每个catch
我有错误的错误。
希望我明确表示,如果遗漏任何内容,请告诉我。
提前感谢您的帮助!
答案 0 :(得分:3)
就像在同步代码中一样,您可以通过抛出错误来实现此目的。当您使用承诺并且已经在then
链中时,这是惯用的事情:
function doSomething(): Promise<someValue>
return somePackage.someMethodWithPromise().then((result)=> {
if (badResult(result)) {
throw new Error('Bad result!');
}
return someValueToTheNextThen;
})
}
doSomething()
.then(result => {
// this will get skipped if an error was thrown
})
.catch(error => {
// error will be caught here if one was thrown
console.error(error);
});
答案 1 :(得分:2)
.then
也只返回一个Promise。如果确定存在错误,您可以简单地创建一个被拒绝的承诺并从那里返回。
return somePackage.someMethodWithPromise().then(result => {
if (result.erroneous()) return Promise.reject('erroneous data');
return someValueToTheNextThen;
})
您也可以throw anError;
中的then
catch
,<?php
include("./includes/randomRoller.php")
?>
<style type="text/css">
#cookies {
width: 50px;
height: 100px;
background-color: #000000;
color: #ffffff;
}
#bunnies {
width: 100px;
height: 500px;
background-color: #555555;
color: red;
}
</style>
<script>
function roll() {
document.getElementById('bunnies').innerHTML = '';
document.getElementById('bunnies').innerHTML = '<?php echo(roll()) ?>';
}
</script>
<button type="button" onClick="roll()">Test</button>
<div id="cookies">
</div>
<br>
<br>
<div id="bunnies">
</div>
阻止<?php
function roll() {
return rand(1 , 200);
}
?>
。