我正在努力实现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(...)中,则会被重定向。出于这个原因,我觉得我对诺言有些不了解。

我是否正确链接在一起?或者,我在尝试做我做不到的事情吗?如果我不能这样做,那有什么选择呢?

谢谢!

最佳答案

是的,要做的关键是记住在Promise链中添加一个错误处理程序。这可以通过按照Chris的建议在链的末尾添加第二种方法回调,或以.catch(function(err){console.log(err);})调用结束链来实现。

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

08-17 06:25