如何拒绝我没有创造的承诺?

时间:2016-09-25 17:50:01

标签: javascript promise bluebird chaining

这里的承诺相当新,我想知道......

看了bluebird包以处理承诺:

  • 创建解析器
  • 决定成功/拒绝失败
  • 返回创建的解析器promise属性

我一直想知道如何使用已经创建承诺的软件包拒绝承诺提出catch,并且我只是使用他们的{{1}链?

我的意思是,在我的创建解析器上使用.then最终会向此函数的用户提出reject

如果我没有解析器,我如何提出catch。将承诺链接如下:

catch

我看到某些软件包实现这一目标的唯一方法是返回一个function doSomthing(): Promise<someValue> return somePackage.someMethodWithPromise().then((result)=> { return someValueToTheNextThen; }) } 对象,以便下一个{ errors, result }可以检查是否有任何错误并对其做出反应,但我想要提出then并且不检查每个catch我有错误的错误。

希望我明确表示,如果遗漏任何内容,请告诉我。

提前感谢您的帮助!

2 个答案:

答案 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); } ?>