在JavaScript中链接承诺

时间:2014-08-20 19:52:43

标签: javascript angularjs

我正在努力让我了解JavaScript中的承诺。根据我的理解,我可以把它们连在一起。但是,有些东西我觉得我很想念。目前,我有一个使用$localForage module的AngularJS应用。我需要在本地存储中设置一个项目。然后,我需要从本地存储中删除一个项目。最后,我需要将用户重定向到另一个页面。为了实现这一目标,我编写了以下代码:

$localForage.setItem('name', 'John Doe')
  .then(function() { return $localForage.removeItem('history'); })
  .then(function() {
    console.log('redirecting the user...');
    $location.url('/views/page-2');
    console.log('should redirect');
  })
;

执行此代码时,我在控制台中看到以下内容:

redirecting the user...
should redirect

但是,我从未被重定向到/views/page-2。有趣的是,如果我将$location.url('/views/page-2');放在第一个then(...)中,我会被重定向。出于这个原因,我觉得有些事我对承诺不了解。

我是否正确地联系在一起?或者,我正在尝试一些我不能做的事情?如果我不能这样做,还有什么选择?

谢谢!

1 个答案:

答案 0 :(得分:0)

是的,关键是要记住在promise链中添加一个错误处理程序。这可以通过将第二种方法回调添加到您建议的链末尾来实现,或者通过.catch(函数(错误){console.log(错误);})调用来结束您的链。

除非您明确捕获它们,否则承诺链中的错误往往会进入bitbucket。