【问题标题】:jQuery Deferreds, .pipe and exceptionsjQuery Deferreds、.pipe 和异常
【发布时间】:2012-08-08 18:01:06
【问题描述】:

我的代码看起来有点像这样(当然不那么荒谬):

var d = $.Deferred();
d.pipe(function() {
    throw "a";
}).then(function() {
    console.log("good!");
}, function(e) {
    console.log("I want the exception here");
});
d.resolve();

问题是在.pipedoneFilter 中抛出异常似乎不会让jQuery 将其视为失败,它会导致doneFilter 中未捕获的异常。

另一种方法是创建一个新的 deferred 并在 doneFilter 周围抛出一个 try-catch 块,但我想知道是否有更好的方法来解决它。

【问题讨论】:

  • 我很困惑,因为您的示例没有使用.pipe()doneFilter,然后您继续谈论\-:

标签: javascript jquery exception jquery-deferred


【解决方案1】:

如果你必须使用throw,最好在doneFilterreturn $.Deferred().reject('a')(或其他)中捕获它。 then 中的失败回调将使用您传递的 arg 调用。

【讨论】:

  • 您能详细说明一下吗?显然没有 $.Deferred.reject 这样的东西。
  • 对不起,错字。编辑修复:$.Deferred()
  • 为什么这不是默认行为 :-( github.com/kriskowal/q 默认有它。
  • 这里 (stackoverflow.com/a/13611929/123897) 很好地比较了 Promises/A 和 jQuery Deferred。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 2011-02-16
  • 2012-04-13
相关资源
最近更新 更多