承诺在未决状态下可以保留多长时间?

时间:2017-05-17 15:19:05

标签: javascript angular es6-promise

我在Angular(4)项目中使用Promises,我对它们有一个问题,我在文档中找不到对它的响应。

当我创建Promise时,我基本上等待服务/派对的异步回答。但是,我应该期待这个承诺保持待定状态多长时间? 是否有任何机制会在一段时间后终止它? 这个等待/待定的概念有多可靠?

让我们假设我需要从忙碌的服务中获取一些数据,即使在等待几分钟后也可以回答这些数据,可能更多,无论响应的计算是资源密集型流程还是服务与另一个服务相关联这反应很慢。 在客户端是否有任何东西会以某种方式终止我的Promise并确定/强制创建另一个再次询问我的数据?

有人建议升级到Observables,我会这样做,但是现在我想继续使用Promises,至少在某些代码区域。

很多

2 个答案:

答案 0 :(得分:2)

只要页面已加载,Promise就可以处于暂挂状态。

您可以将呼叫包裹在另一个Promise中,在此引入超时,如

所示
let wrappingPromise = new Promise((resolve, reject) => {
  var error = false;
  setTimeout(function(){
    reject("some error"); 
  }, 3000);
  this.http.get(...).toPromise().then(res => {
    if(!error) {
      resolve(res.json);
    }
  });
}); 

这会在达到超时时导致错误。 它仍将等待收到完整的回复。 Observable可能能够转发取消并关闭连接,以便在达到超时时甚至不再接收结果。这可能取决于具体实现和浏览器使用的浏览器API是否支持该功能。

答案 1 :(得分:2)

int3永远不会解决,就像从未调用的回调一样。

promise是附加回调的返回对象,而不是将回调传递给函数。这就是全部。 刚刚启动的异步操作的控制界面。

相反,请查看您调用此类控件的异步API(如果有的话)。

创造承诺

大多数人都是从异步API返回的promise的使用者。除了包装旧的回调API之外,没有理由创建Promise。在一个理想的世界里,没有必要。