如何拦截承诺请求?

How to intercept promise request?

我正在使用 q 个 promise,我想在 promise 开始时显示微调器。目前我是这样做的:

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

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

function getPromise()
{
    spinner.show()
}

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

你想多了

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

传入 promise,只要 promise 未决,微调器就会运行。

编辑:可以这样做:

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

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

你可以这样做,但我不明白为什么你会这么做。