如何拦截promise请求?

bat*_*man 0 javascript q

我正在使用 q 承诺,并且我想在承诺开始时向旋转器显示。目前我正在这样做:

getPromise().then(function() { spinner.hide() })
Run Code Online (Sandbox Code Playgroud)

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

function getPromise()
{
    spinner.show()
}
Run Code Online (Sandbox Code Playgroud)

但是有什么方法可以拦截thenq 中的块,以便我可以将 the 添加spinner.show到该拦截中?

Mal*_*lio 5

你想太多了

var spinOnPromise = function(p) {
  spinner.show()
  p.finally(function() {
    spinner.hide()
  });
  return p;
}
Run Code Online (Sandbox Code Playgroud)

传入 Promise,只要 Promise 处于待处理状态,旋转器就会继续运行。

编辑:可以这样做:

var spinOnPromise = function(p) {
  spinner.show()
  return p.finally(function() {
    return spinner.hide()
  });
}
Run Code Online (Sandbox Code Playgroud)

如果你这样做,区别在于,如果spinner.hide()返回一个承诺(称为p1),则返回的承诺spinOnPromise()将不会被解析,直到p1被解析,但它将解析为与 相同的值p。详细信息请参见此处

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