0

我有一个小对话框,应该在关闭之前验证,从输入中获取值,然后调用对话框调用者给出的回调。我已经将输入处理实现为采用回调参数的函数,因此链中的每个方法都是异步的。

我想要的是调用isValid,成功回调调用getValues,成功回调调用okCallback。这是我的代码:

var self = this
this.isValid().then(lang.hitch(this, this.getValues), function(){
  console.log('Object invalid')
  return false
}).then(function(item) {
   self.okCallback(item)
})

问题是,即使 isValid() 以错误结束,调用 okCallback 的最终 then() 也会被调用,而 getValues() 没有被调用。

这是正常行为吗?如何进行延迟链接,以便仅在之前的所有操作都成功的情况下才调用最终的成功回调?

4

1 回答 1

2

是的,这是正常行为。您确实已经处理了错误

function(){
  console.log('Object invalid')
  return false
})

从那里您确实返回了一个非错误值 ( false)。要继续错误,请抛出另一个错误,抛出相同的错误,或者不要使用第二个参数then而是单独的addErrback. 或者将错误处理程序放在 . 之后,.then(lang.hitch(this, this.okCallback))这样它也可以处理来自getValues的错误而不影响okCallback.

于 2013-10-18T10:15:35.427 回答