如何拦截承诺请求?

时间:2015-08-07 03:46:33

标签: javascript q

我正在使用q promises,我想在承诺开始时展示微调器。目前我正在这样做:

getPromise().then(function() { spinner.hide() })

getPromise() fn中,我正在显示微调器,所以getPromise看起来像:

function getPromise()
{
    spinner.show()
}

但是有没有办法拦截q中的then块,以便我可以将spinner.show添加到该拦截中?

1 个答案:

答案 0 :(得分:4)

你过度思考了

var spinOnPromise = function(p) {
  spinner.show()
  p.finally(function() {
    spinner.hide()
  });
  return p;
}

传递承诺,只要承诺未决,微调器就会继续。

编辑:可以执行此操作:

var spinOnPromise = function(p) {
  spinner.show()
  return p.finally(function() {
    return spinner.hide()
  });
}

如果您这样做,不同之处在于,如果spinner.hide()返回一个承诺(称之为p1),则从spinOnPromise()返回的承诺将不会得到解决,直到p1已解决,但它将解析为与p相同的值。有关详细信息,请参阅here

你可以这样做,但我没有看到你为什么会这样做。