【问题标题】:How to set Timeout in Promise.race()?如何在 Promise.race() 中设置超时?
【发布时间】:2020-12-08 23:28:09
【问题描述】:

我正在尝试在我的角度组件中使用 promise.race 函数,但我遇到了超时问题。即使我在 promise.race 中将超时定义为 1 秒,响应等待 15 秒执行?这是我的代码:

let statusFind = this.getStatus(); //This takes 15 seconds
let statusTimeout = new Promise((resolve, reject) => { // This resolved in 1 second
    let wait = setTimeout(() => {
      clearTimeout(wait);
      let status = {connection : 0 , online : -3,  isPrintable : false };
      resolve (status);
    }, 1000)
});
      
Promise.race([ statusFind, statusTimeout]).then((statusResponse: any) => {
// Here I am getting my status response back in 15 second even if my timeout promise gets resolved first. 
//Though I am getting the value here as my timeout value but why it is waiting for my 15 second first promise to finish?

});

请帮忙。

【问题讨论】:

    标签: angularjs promise es6-promise angular-promise race-condition


    【解决方案1】:

    AngularJS 通过提供自己的事件处理循环来修改正常的 JavaScript 流程。这将 JavaScript 拆分为经典和 AngularJS 执行上下文。只有在 AngularJS 执行上下文中应用的操作才能受益于 AngularJS 数据绑定、异常处理、属性监视等。

    ES6 Promise 没有与 AngularJS 框架及其摘要周期集成。

    改为使用由 AngularJS $q 服务创建的承诺:

    ̶P̶r̶o̶m̶i̶s̶e̶.̶r̶a̶c̶e̶(̶[̶ ̶s̶t̶a̶t̶u̶s̶F̶i̶n̶d̶,̶ ̶s̶t̶a̶t̶u̶s̶T̶i̶m̶e̶o̶u̶t̶]̶)̶.̶t̶h̶e̶n̶(̶(̶s̶t̶a̶t̶u̶s̶R̶e̶s̶p̶o̶n̶s̶e̶:̶ ̶a̶n̶y̶)̶ ̶=̶>̶ ̶{̶
    $q.race([ statusFind, statusTimeout]).then((statusResponse: any) => {
    
        // Here I am getting my status response back in 15 second even if my timeout promise gets resolved first. 
        //Though I am getting the value here as my timeout value but why it is waiting for my 15 second first promise to finish?
    
    });
    

    有关详细信息,请参阅

    【讨论】:

      猜你喜欢
      • 2022-11-12
      • 2016-09-12
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 2017-07-06
      • 2014-07-21
      相关资源
      最近更新 更多